//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS GuardDuty service.
///
/// Amazon GuardDuty is a continuous security monitoring service that analyzes and processes the following foundational data sources - VPC flow logs, Amazon Web Services CloudTrail management event logs, CloudTrail S3 data event logs, EKS audit logs, DNS logs, Amazon EBS volume data, runtime activity belonging to container workloads, such  as Amazon EKS, Amazon ECS (including Amazon Web Services Fargate), and Amazon EC2 instances. It uses threat intelligence feeds, such as lists of malicious IPs and domains, and machine learning to identify unexpected, potentially unauthorized, and malicious activity within your Amazon Web Services environment. This can include issues like escalations of privileges, uses of exposed credentials, or communication with malicious IPs, domains, or presence of malware on your Amazon EC2 instances and container workloads. For example, GuardDuty can detect compromised EC2 instances and container workloads serving malware, or mining bitcoin.  GuardDuty also monitors Amazon Web Services account access behavior for signs of compromise, such as unauthorized infrastructure deployments like EC2 instances deployed in a Region that has never been used, or unusual API calls like a password policy change to reduce password strength.  GuardDuty informs you about the status of your Amazon Web Services environment by producing security findings that you can view in the GuardDuty console or through Amazon EventBridge. For more information, see the  Amazon GuardDuty User Guide .
public struct GuardDuty: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the GuardDuty client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "GuardDuty",
            serviceIdentifier: "guardduty",
            serviceProtocol: .restjson,
            apiVersion: "2017-11-28",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: GuardDutyErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-west-1": "guardduty-fips.ca-west-1.amazonaws.com",
            "us-east-1": "guardduty-fips.us-east-1.amazonaws.com",
            "us-east-2": "guardduty-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "guardduty.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "guardduty.us-gov-west-1.amazonaws.com",
            "us-west-1": "guardduty-fips.us-west-1.amazonaws.com",
            "us-west-2": "guardduty-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Accepts the invitation to be a member account and get monitored by a GuardDuty administrator account that sent the invitation.
    @Sendable
    @inlinable
    public func acceptAdministratorInvitation(_ input: AcceptAdministratorInvitationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AcceptAdministratorInvitationResponse {
        try await self.client.execute(
            operation: "AcceptAdministratorInvitation", 
            path: "/detector/{DetectorId}/administrator", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Accepts the invitation to be a member account and get monitored by a GuardDuty administrator account that sent the invitation.
    ///
    /// Parameters:
    ///   - administratorId: The account ID of the GuardDuty administrator account whose invitation you're accepting.
    ///   - detectorId: The unique ID of the detector of the GuardDuty member account.
    ///   - invitationId: The value that is used to validate the administrator account to the member account.
    ///   - logger: Logger use during operation
    @inlinable
    public func acceptAdministratorInvitation(
        administratorId: String? = nil,
        detectorId: String,
        invitationId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcceptAdministratorInvitationResponse {
        let input = AcceptAdministratorInvitationRequest(
            administratorId: administratorId, 
            detectorId: detectorId, 
            invitationId: invitationId
        )
        return try await self.acceptAdministratorInvitation(input, logger: logger)
    }

    /// Accepts the invitation to be monitored by a GuardDuty administrator account.
    @available(*, deprecated, message: "This operation is deprecated, use AcceptAdministratorInvitation instead")
    @Sendable
    @inlinable
    public func acceptInvitation(_ input: AcceptInvitationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AcceptInvitationResponse {
        try await self.client.execute(
            operation: "AcceptInvitation", 
            path: "/detector/{DetectorId}/master", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Accepts the invitation to be monitored by a GuardDuty administrator account.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector of the GuardDuty member account. To find the detectorId in the current Region, see the
    ///   - invitationId: The value that is used to validate the administrator account to the member account.
    ///   - masterId: The account ID of the GuardDuty administrator account whose invitation you're accepting.
    ///   - logger: Logger use during operation
    @available(*, deprecated, message: "This operation is deprecated, use AcceptAdministratorInvitation instead")
    @inlinable
    public func acceptInvitation(
        detectorId: String,
        invitationId: String? = nil,
        masterId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcceptInvitationResponse {
        let input = AcceptInvitationRequest(
            detectorId: detectorId, 
            invitationId: invitationId, 
            masterId: masterId
        )
        return try await self.acceptInvitation(input, logger: logger)
    }

    /// Archives GuardDuty findings that are specified by the list of finding IDs.  Only the administrator account can archive findings. Member accounts don't have permission to archive findings from their accounts.
    @Sendable
    @inlinable
    public func archiveFindings(_ input: ArchiveFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ArchiveFindingsResponse {
        try await self.client.execute(
            operation: "ArchiveFindings", 
            path: "/detector/{DetectorId}/findings/archive", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Archives GuardDuty findings that are specified by the list of finding IDs.  Only the administrator account can archive findings. Member accounts don't have permission to archive findings from their accounts.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector that specifies the GuardDuty service whose findings you want to archive. To find the detectorId in the current Region, see the
    ///   - findingIds: The IDs of the findings that you want to archive.
    ///   - logger: Logger use during operation
    @inlinable
    public func archiveFindings(
        detectorId: String,
        findingIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ArchiveFindingsResponse {
        let input = ArchiveFindingsRequest(
            detectorId: detectorId, 
            findingIds: findingIds
        )
        return try await self.archiveFindings(input, logger: logger)
    }

    /// Creates a single GuardDuty detector. A detector is a resource that represents the GuardDuty service. To start using GuardDuty, you must create a detector in each Region where you enable the service. You can have only one detector per account per Region. All data sources are enabled in a new detector by default.   When you don't specify any features, with an  exception to RUNTIME_MONITORING, all the optional features are  enabled by default.   When you specify some of the features, any feature that is not specified in the  API call gets enabled by default, with an exception to RUNTIME_MONITORING.    Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func createDetector(_ input: CreateDetectorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDetectorResponse {
        try await self.client.execute(
            operation: "CreateDetector", 
            path: "/detector", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a single GuardDuty detector. A detector is a resource that represents the GuardDuty service. To start using GuardDuty, you must create a detector in each Region where you enable the service. You can have only one detector per account per Region. All data sources are enabled in a new detector by default.   When you don't specify any features, with an  exception to RUNTIME_MONITORING, all the optional features are  enabled by default.   When you specify some of the features, any feature that is not specified in the  API call gets enabled by default, with an exception to RUNTIME_MONITORING.    Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - clientToken: The idempotency token for the create request.
    ///   - enable: A Boolean value that specifies whether the detector is to be enabled.
    ///   - features: A list of features that will be configured for the detector.
    ///   - findingPublishingFrequency: A value that specifies how frequently updated findings are exported.
    ///   - tags: The tags to be added to a new detector resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDetector(
        clientToken: String? = CreateDetectorRequest.idempotencyToken(),
        enable: Bool? = nil,
        features: [DetectorFeatureConfiguration]? = nil,
        findingPublishingFrequency: FindingPublishingFrequency? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDetectorResponse {
        let input = CreateDetectorRequest(
            clientToken: clientToken, 
            enable: enable, 
            features: features, 
            findingPublishingFrequency: findingPublishingFrequency, 
            tags: tags
        )
        return try await self.createDetector(input, logger: logger)
    }

    /// Creates a filter using the specified finding criteria. The maximum number of saved filters per Amazon Web Services account per Region is 100. For more information, see Quotas for GuardDuty.
    @Sendable
    @inlinable
    public func createFilter(_ input: CreateFilterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFilterResponse {
        try await self.client.execute(
            operation: "CreateFilter", 
            path: "/detector/{DetectorId}/filter", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a filter using the specified finding criteria. The maximum number of saved filters per Amazon Web Services account per Region is 100. For more information, see Quotas for GuardDuty.
    ///
    /// Parameters:
    ///   - action: Specifies the action that is to be applied to the findings that match the filter.
    ///   - clientToken: The idempotency token for the create request.
    ///   - description: The description of the filter. Valid characters include alphanumeric characters, and special characters such as hyphen, period, colon, underscore, parentheses ({ }, [ ], and ( )), forward slash, horizontal tab, vertical tab, newline, form feed, return, and whitespace.
    ///   - detectorId: The detector ID associated with the GuardDuty account for which you want to create a filter. To find the detectorId in the current Region, see the
    ///   - findingCriteria: Represents the criteria to be used in the filter for querying findings. You can only use the following attributes to query findings:   accountId   id   region   severity To filter on the basis of severity, the API and CLI use the following input list for the FindingCriteria condition:    Low: ["1", "2", "3"]     Medium: ["4", "5", "6"]     High: ["7", "8"]     Critical: ["9", "10"]    For more information, see Findings severity levels in the Amazon GuardDuty User Guide.   type   updatedAt Type: ISO 8601 string format: YYYY-MM-DDTHH:MM:SS.SSSZ or YYYY-MM-DDTHH:MM:SSZ depending on whether the value contains milliseconds.   resource.accessKeyDetails.accessKeyId   resource.accessKeyDetails.principalId   resource.accessKeyDetails.userName   resource.accessKeyDetails.userType   resource.instanceDetails.iamInstanceProfile.id   resource.instanceDetails.imageId   resource.instanceDetails.instanceId   resource.instanceDetails.tags.key   resource.instanceDetails.tags.value   resource.instanceDetails.networkInterfaces.ipv6Addresses   resource.instanceDetails.networkInterfaces.privateIpAddresses.privateIpAddress   resource.instanceDetails.networkInterfaces.publicDnsName   resource.instanceDetails.networkInterfaces.publicIp   resource.instanceDetails.networkInterfaces.securityGroups.groupId   resource.instanceDetails.networkInterfaces.securityGroups.groupName   resource.instanceDetails.networkInterfaces.subnetId   resource.instanceDetails.networkInterfaces.vpcId   resource.instanceDetails.outpostArn   resource.resourceType   resource.s3BucketDetails.publicAccess.effectivePermissions   resource.s3BucketDetails.name   resource.s3BucketDetails.tags.key   resource.s3BucketDetails.tags.value   resource.s3BucketDetails.type   service.action.actionType   service.action.awsApiCallAction.api   service.action.awsApiCallAction.callerType   service.action.awsApiCallAction.errorCode   service.action.awsApiCallAction.remoteIpDetails.city.cityName   service.action.awsApiCallAction.remoteIpDetails.country.countryName   service.action.awsApiCallAction.remoteIpDetails.ipAddressV4   service.action.awsApiCallAction.remoteIpDetails.ipAddressV6   service.action.awsApiCallAction.remoteIpDetails.organization.asn   service.action.awsApiCallAction.remoteIpDetails.organization.asnOrg   service.action.awsApiCallAction.serviceName   service.action.dnsRequestAction.domain   service.action.dnsRequestAction.domainWithSuffix   service.action.dnsRequestAction.vpcOwnerAccountId   service.action.networkConnectionAction.blocked   service.action.networkConnectionAction.connectionDirection   service.action.networkConnectionAction.localPortDetails.port   service.action.networkConnectionAction.protocol   service.action.networkConnectionAction.remoteIpDetails.city.cityName   service.action.networkConnectionAction.remoteIpDetails.country.countryName   service.action.networkConnectionAction.remoteIpDetails.ipAddressV4   service.action.networkConnectionAction.remoteIpDetails.ipAddressV6   service.action.networkConnectionAction.remoteIpDetails.organization.asn   service.action.networkConnectionAction.remoteIpDetails.organization.asnOrg   service.action.networkConnectionAction.remotePortDetails.port   service.action.awsApiCallAction.remoteAccountDetails.affiliated   service.action.kubernetesApiCallAction.remoteIpDetails.ipAddressV4   service.action.kubernetesApiCallAction.remoteIpDetails.ipAddressV6   service.action.kubernetesApiCallAction.namespace   service.action.kubernetesApiCallAction.remoteIpDetails.organization.asn   service.action.kubernetesApiCallAction.requestUri   service.action.kubernetesApiCallAction.statusCode   service.action.networkConnectionAction.localIpDetails.ipAddressV4   service.action.networkConnectionAction.localIpDetails.ipAddressV6   service.action.networkConnectionAction.protocol   service.action.awsApiCallAction.serviceName   service.action.awsApiCallAction.remoteAccountDetails.accountId   service.additionalInfo.threatListName   service.resourceRole   resource.eksClusterDetails.name   resource.kubernetesDetails.kubernetesWorkloadDetails.name   resource.kubernetesDetails.kubernetesWorkloadDetails.namespace   resource.kubernetesDetails.kubernetesUserDetails.username   resource.kubernetesDetails.kubernetesWorkloadDetails.containers.image   resource.kubernetesDetails.kubernetesWorkloadDetails.containers.imagePrefix   service.ebsVolumeScanDetails.scanId   service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.name   service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.severity   service.ebsVolumeScanDetails.scanDetections.threatDetectedByName.threatNames.filePaths.hash   resource.ecsClusterDetails.name   resource.ecsClusterDetails.taskDetails.containers.image   resource.ecsClusterDetails.taskDetails.definitionArn   resource.containerDetails.image   resource.rdsDbInstanceDetails.dbInstanceIdentifier   resource.rdsDbInstanceDetails.dbClusterIdentifier   resource.rdsDbInstanceDetails.engine   resource.rdsDbUserDetails.user   resource.rdsDbInstanceDetails.tags.key   resource.rdsDbInstanceDetails.tags.value   service.runtimeDetails.process.executableSha256   service.runtimeDetails.process.name   service.runtimeDetails.process.executablePath   resource.lambdaDetails.functionName   resource.lambdaDetails.functionArn   resource.lambdaDetails.tags.key   resource.lambdaDetails.tags.value
    ///   - name: The name of the filter. Valid characters include period (.), underscore (_), dash (-), and alphanumeric characters. A whitespace is considered to be an invalid character.
    ///   - rank: Specifies the position of the filter in the list of current filters. Also specifies the order in which this filter is applied to the findings.
    ///   - tags: The tags to be added to a new filter resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFilter(
        action: FilterAction? = nil,
        clientToken: String? = CreateFilterRequest.idempotencyToken(),
        description: String? = nil,
        detectorId: String,
        findingCriteria: FindingCriteria? = nil,
        name: String? = nil,
        rank: Int? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFilterResponse {
        let input = CreateFilterRequest(
            action: action, 
            clientToken: clientToken, 
            description: description, 
            detectorId: detectorId, 
            findingCriteria: findingCriteria, 
            name: name, 
            rank: rank, 
            tags: tags
        )
        return try await self.createFilter(input, logger: logger)
    }

    /// Creates a new IPSet, which is called a trusted IP list in the console user interface. An IPSet is a list of IP addresses that are trusted for secure communication with Amazon Web Services infrastructure and applications. GuardDuty doesn't generate findings for IP addresses that are included in IPSets. Only users from the administrator account can use this operation.
    @Sendable
    @inlinable
    public func createIPSet(_ input: CreateIPSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateIPSetResponse {
        try await self.client.execute(
            operation: "CreateIPSet", 
            path: "/detector/{DetectorId}/ipset", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new IPSet, which is called a trusted IP list in the console user interface. An IPSet is a list of IP addresses that are trusted for secure communication with Amazon Web Services infrastructure and applications. GuardDuty doesn't generate findings for IP addresses that are included in IPSets. Only users from the administrator account can use this operation.
    ///
    /// Parameters:
    ///   - activate: A Boolean value that indicates whether GuardDuty is to start using the uploaded IPSet.
    ///   - clientToken: The idempotency token for the create request.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account for which you want to create an IPSet. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - format: The format of the file that contains the IPSet.
    ///   - location: The URI of the file that contains the IPSet.
    ///   - name: The user-friendly name to identify the IPSet. Allowed characters are alphanumeric, whitespace, dash (-), and underscores (_).
    ///   - tags: The tags to be added to a new IP set resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createIPSet(
        activate: Bool? = nil,
        clientToken: String? = CreateIPSetRequest.idempotencyToken(),
        detectorId: String,
        expectedBucketOwner: String? = nil,
        format: IpSetFormat? = nil,
        location: String? = nil,
        name: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateIPSetResponse {
        let input = CreateIPSetRequest(
            activate: activate, 
            clientToken: clientToken, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            format: format, 
            location: location, 
            name: name, 
            tags: tags
        )
        return try await self.createIPSet(input, logger: logger)
    }

    /// Creates a new Malware Protection plan for the protected resource. When you create a Malware Protection plan, the Amazon Web Services service terms for GuardDuty Malware Protection apply. For more information, see Amazon Web Services service terms for GuardDuty Malware Protection.
    @Sendable
    @inlinable
    public func createMalwareProtectionPlan(_ input: CreateMalwareProtectionPlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateMalwareProtectionPlanResponse {
        try await self.client.execute(
            operation: "CreateMalwareProtectionPlan", 
            path: "/malware-protection-plan", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Malware Protection plan for the protected resource. When you create a Malware Protection plan, the Amazon Web Services service terms for GuardDuty Malware Protection apply. For more information, see Amazon Web Services service terms for GuardDuty Malware Protection.
    ///
    /// Parameters:
    ///   - actions: Information about whether the tags will be added to the S3 object after scanning.
    ///   - clientToken: The idempotency token for the create request.
    ///   - protectedResource: Information about the protected resource that is associated with the created  Malware Protection plan. Presently, S3Bucket is the only supported  protected resource.
    ///   - role: Amazon Resource Name (ARN) of the IAM role that has the permissions to scan and add tags to the associated protected resource.
    ///   - tags: Tags added to the Malware Protection plan resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createMalwareProtectionPlan(
        actions: MalwareProtectionPlanActions? = nil,
        clientToken: String? = CreateMalwareProtectionPlanRequest.idempotencyToken(),
        protectedResource: CreateProtectedResource? = nil,
        role: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateMalwareProtectionPlanResponse {
        let input = CreateMalwareProtectionPlanRequest(
            actions: actions, 
            clientToken: clientToken, 
            protectedResource: protectedResource, 
            role: role, 
            tags: tags
        )
        return try await self.createMalwareProtectionPlan(input, logger: logger)
    }

    /// Creates member accounts of the current Amazon Web Services account by specifying a list of Amazon Web Services account IDs. This step is a prerequisite for managing the associated member accounts either by invitation or through an organization. As a delegated administrator, using CreateMembers will enable GuardDuty in  the added member accounts, with the exception of the organization delegated administrator account. A delegated administrator must enable GuardDuty  prior to being added as a member. When you use CreateMembers as an Organizations delegated  administrator, GuardDuty applies your organization's auto-enable settings to the member accounts in this request, irrespective of the accounts being new or existing members. For  more information about the existing auto-enable settings for your organization, see DescribeOrganizationConfiguration. If you disassociate a member account that was added by invitation, the member account details  obtained from this API, including the associated email addresses, will be retained.  This is done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  When the member accounts added through Organizations are later disassociated, you (administrator) can't invite them by calling the InviteMembers API. You can create an association with these member accounts again only by calling the CreateMembers API.
    @Sendable
    @inlinable
    public func createMembers(_ input: CreateMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateMembersResponse {
        try await self.client.execute(
            operation: "CreateMembers", 
            path: "/detector/{DetectorId}/member", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates member accounts of the current Amazon Web Services account by specifying a list of Amazon Web Services account IDs. This step is a prerequisite for managing the associated member accounts either by invitation or through an organization. As a delegated administrator, using CreateMembers will enable GuardDuty in  the added member accounts, with the exception of the organization delegated administrator account. A delegated administrator must enable GuardDuty  prior to being added as a member. When you use CreateMembers as an Organizations delegated  administrator, GuardDuty applies your organization's auto-enable settings to the member accounts in this request, irrespective of the accounts being new or existing members. For  more information about the existing auto-enable settings for your organization, see DescribeOrganizationConfiguration. If you disassociate a member account that was added by invitation, the member account details  obtained from this API, including the associated email addresses, will be retained.  This is done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  When the member accounts added through Organizations are later disassociated, you (administrator) can't invite them by calling the InviteMembers API. You can create an association with these member accounts again only by calling the CreateMembers API.
    ///
    /// Parameters:
    ///   - accountDetails: A list of account ID and email address pairs of the accounts that you want to associate with the GuardDuty administrator account.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account for which you want to associate member accounts. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func createMembers(
        accountDetails: [AccountDetail]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateMembersResponse {
        let input = CreateMembersRequest(
            accountDetails: accountDetails, 
            detectorId: detectorId
        )
        return try await self.createMembers(input, logger: logger)
    }

    /// Creates a publishing destination where you can export your GuardDuty findings. Before you start exporting the findings, the destination resource must exist.
    @Sendable
    @inlinable
    public func createPublishingDestination(_ input: CreatePublishingDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreatePublishingDestinationResponse {
        try await self.client.execute(
            operation: "CreatePublishingDestination", 
            path: "/detector/{DetectorId}/publishingDestination", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a publishing destination where you can export your GuardDuty findings. Before you start exporting the findings, the destination resource must exist.
    ///
    /// Parameters:
    ///   - clientToken: The idempotency token for the request.
    ///   - destinationProperties: The properties of the publishing destination, including the ARNs for the destination and the KMS key used for encryption.
    ///   - destinationType: The type of resource for the publishing destination. Currently only Amazon S3 buckets are supported.
    ///   - detectorId: The ID of the GuardDuty detector associated with the publishing destination. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func createPublishingDestination(
        clientToken: String? = CreatePublishingDestinationRequest.idempotencyToken(),
        destinationProperties: DestinationProperties? = nil,
        destinationType: DestinationType? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreatePublishingDestinationResponse {
        let input = CreatePublishingDestinationRequest(
            clientToken: clientToken, 
            destinationProperties: destinationProperties, 
            destinationType: destinationType, 
            detectorId: detectorId
        )
        return try await self.createPublishingDestination(input, logger: logger)
    }

    /// Generates sample findings of types specified by the list of finding types. If 'NULL' is specified for findingTypes, the API generates sample findings of all supported finding types.
    @Sendable
    @inlinable
    public func createSampleFindings(_ input: CreateSampleFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSampleFindingsResponse {
        try await self.client.execute(
            operation: "CreateSampleFindings", 
            path: "/detector/{DetectorId}/findings/create", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Generates sample findings of types specified by the list of finding types. If 'NULL' is specified for findingTypes, the API generates sample findings of all supported finding types.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector for which you need to create sample findings. To find the detectorId in the current Region, see the
    ///   - findingTypes: The types of sample findings to generate.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSampleFindings(
        detectorId: String,
        findingTypes: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSampleFindingsResponse {
        let input = CreateSampleFindingsRequest(
            detectorId: detectorId, 
            findingTypes: findingTypes
        )
        return try await self.createSampleFindings(input, logger: logger)
    }

    /// Creates a new threat entity set. In a threat entity set, you can provide known malicious  IP addresses and domains for your Amazon Web Services environment.  GuardDuty generates findings based on the entries in the threat entity sets.  Only users of the administrator account can manage entity sets, which automatically apply to member accounts.
    @Sendable
    @inlinable
    public func createThreatEntitySet(_ input: CreateThreatEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateThreatEntitySetResponse {
        try await self.client.execute(
            operation: "CreateThreatEntitySet", 
            path: "/detector/{DetectorId}/threatentityset", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new threat entity set. In a threat entity set, you can provide known malicious  IP addresses and domains for your Amazon Web Services environment.  GuardDuty generates findings based on the entries in the threat entity sets.  Only users of the administrator account can manage entity sets, which automatically apply to member accounts.
    ///
    /// Parameters:
    ///   - activate: A boolean value that indicates whether GuardDuty should start using the uploaded threat entity set to generate findings.
    ///   - clientToken: The idempotency token for the create request.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account for which you want to create a threat entity set. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - format: The format of the file that contains the threat entity set.
    ///   - location: The URI of the file that contains the threat entity set. The format of the Location URL must be a valid Amazon S3 URL format. Invalid URL formats will result in an error, regardless of whether you activate the entity set or not. For more information about format of the location URLs, see Format of location URL under Step 2: Adding trusted or threat intelligence data in the Amazon GuardDuty User Guide.
    ///   - name: A user-friendly name to identify the threat entity set. The name of your list can include  lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).
    ///   - tags: The tags to be added to a new threat entity set resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createThreatEntitySet(
        activate: Bool? = nil,
        clientToken: String? = CreateThreatEntitySetRequest.idempotencyToken(),
        detectorId: String,
        expectedBucketOwner: String? = nil,
        format: ThreatEntitySetFormat? = nil,
        location: String? = nil,
        name: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateThreatEntitySetResponse {
        let input = CreateThreatEntitySetRequest(
            activate: activate, 
            clientToken: clientToken, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            format: format, 
            location: location, 
            name: name, 
            tags: tags
        )
        return try await self.createThreatEntitySet(input, logger: logger)
    }

    /// Creates a new ThreatIntelSet. ThreatIntelSets consist of known malicious IP addresses. GuardDuty generates findings based on ThreatIntelSets. Only users of the administrator account can use this operation.
    @Sendable
    @inlinable
    public func createThreatIntelSet(_ input: CreateThreatIntelSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateThreatIntelSetResponse {
        try await self.client.execute(
            operation: "CreateThreatIntelSet", 
            path: "/detector/{DetectorId}/threatintelset", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new ThreatIntelSet. ThreatIntelSets consist of known malicious IP addresses. GuardDuty generates findings based on ThreatIntelSets. Only users of the administrator account can use this operation.
    ///
    /// Parameters:
    ///   - activate: A Boolean value that indicates whether GuardDuty is to start using the uploaded ThreatIntelSet.
    ///   - clientToken: The idempotency token for the create request.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account for which you want to create a threatIntelSet. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - format: The format of the file that contains the ThreatIntelSet.
    ///   - location: The URI of the file that contains the ThreatIntelSet.
    ///   - name: A user-friendly ThreatIntelSet name displayed in all findings that are generated by activity that involves IP addresses included in this ThreatIntelSet.
    ///   - tags: The tags to be added to a new threat list resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createThreatIntelSet(
        activate: Bool? = nil,
        clientToken: String? = CreateThreatIntelSetRequest.idempotencyToken(),
        detectorId: String,
        expectedBucketOwner: String? = nil,
        format: ThreatIntelSetFormat? = nil,
        location: String? = nil,
        name: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateThreatIntelSetResponse {
        let input = CreateThreatIntelSetRequest(
            activate: activate, 
            clientToken: clientToken, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            format: format, 
            location: location, 
            name: name, 
            tags: tags
        )
        return try await self.createThreatIntelSet(input, logger: logger)
    }

    /// Creates a new trusted entity set. In the trusted entity set, you can provide IP addresses and domains that you believe are secure for communication in your Amazon Web Services environment. GuardDuty  will not generate findings for the entries that are specified in a trusted entity set. At any given time, you can have only one trusted entity set.  Only users of the administrator account can manage the entity sets, which automatically apply to member accounts.
    @Sendable
    @inlinable
    public func createTrustedEntitySet(_ input: CreateTrustedEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateTrustedEntitySetResponse {
        try await self.client.execute(
            operation: "CreateTrustedEntitySet", 
            path: "/detector/{DetectorId}/trustedentityset", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new trusted entity set. In the trusted entity set, you can provide IP addresses and domains that you believe are secure for communication in your Amazon Web Services environment. GuardDuty  will not generate findings for the entries that are specified in a trusted entity set. At any given time, you can have only one trusted entity set.  Only users of the administrator account can manage the entity sets, which automatically apply to member accounts.
    ///
    /// Parameters:
    ///   - activate: A boolean value that indicates whether GuardDuty is to start using the uploaded trusted entity set.
    ///   - clientToken: The idempotency token for the create request.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account for which you want to create a trusted entity set. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - format: The format of the file that contains the trusted entity set.
    ///   - location: The URI of the file that contains the threat entity set. The format of the Location URL must be a valid Amazon S3 URL format. Invalid URL formats will result in an error, regardless of whether you activate the entity set or not. For more information about format of the location URLs, see Format of location URL under Step 2: Adding trusted or threat intelligence data in the Amazon GuardDuty User Guide.
    ///   - name: A user-friendly name to identify the trusted entity set. The name of your list can include  lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).
    ///   - tags: The tags to be added to a new trusted entity set resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createTrustedEntitySet(
        activate: Bool? = nil,
        clientToken: String? = CreateTrustedEntitySetRequest.idempotencyToken(),
        detectorId: String,
        expectedBucketOwner: String? = nil,
        format: TrustedEntitySetFormat? = nil,
        location: String? = nil,
        name: String? = nil,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateTrustedEntitySetResponse {
        let input = CreateTrustedEntitySetRequest(
            activate: activate, 
            clientToken: clientToken, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            format: format, 
            location: location, 
            name: name, 
            tags: tags
        )
        return try await self.createTrustedEntitySet(input, logger: logger)
    }

    /// Declines invitations sent to the current member account by Amazon Web Services accounts specified by their account IDs.
    @Sendable
    @inlinable
    public func declineInvitations(_ input: DeclineInvitationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeclineInvitationsResponse {
        try await self.client.execute(
            operation: "DeclineInvitations", 
            path: "/invitation/decline", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Declines invitations sent to the current member account by Amazon Web Services accounts specified by their account IDs.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs of the Amazon Web Services accounts that sent invitations to the current member account that you want to decline invitations from.
    ///   - logger: Logger use during operation
    @inlinable
    public func declineInvitations(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeclineInvitationsResponse {
        let input = DeclineInvitationsRequest(
            accountIds: accountIds
        )
        return try await self.declineInvitations(input, logger: logger)
    }

    /// Deletes an Amazon GuardDuty detector that is specified by the detector ID.
    @Sendable
    @inlinable
    public func deleteDetector(_ input: DeleteDetectorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDetectorResponse {
        try await self.client.execute(
            operation: "DeleteDetector", 
            path: "/detector/{DetectorId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon GuardDuty detector that is specified by the detector ID.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that you want to delete. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDetector(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDetectorResponse {
        let input = DeleteDetectorRequest(
            detectorId: detectorId
        )
        return try await self.deleteDetector(input, logger: logger)
    }

    /// Deletes the filter specified by the filter name.
    @Sendable
    @inlinable
    public func deleteFilter(_ input: DeleteFilterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteFilterResponse {
        try await self.client.execute(
            operation: "DeleteFilter", 
            path: "/detector/{DetectorId}/filter/{FilterName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the filter specified by the filter name.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the filter. To find the detectorId in the current Region, see the
    ///   - filterName: The name of the filter that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFilter(
        detectorId: String,
        filterName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteFilterResponse {
        let input = DeleteFilterRequest(
            detectorId: detectorId, 
            filterName: filterName
        )
        return try await self.deleteFilter(input, logger: logger)
    }

    /// Deletes the IPSet specified by the ipSetId. IPSets are called trusted IP lists in the console user interface.
    @Sendable
    @inlinable
    public func deleteIPSet(_ input: DeleteIPSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteIPSetResponse {
        try await self.client.execute(
            operation: "DeleteIPSet", 
            path: "/detector/{DetectorId}/ipset/{IpSetId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the IPSet specified by the ipSetId. IPSets are called trusted IP lists in the console user interface.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector associated with the IPSet. To find the detectorId in the current Region, see the
    ///   - ipSetId: The unique ID of the IPSet to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteIPSet(
        detectorId: String,
        ipSetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteIPSetResponse {
        let input = DeleteIPSetRequest(
            detectorId: detectorId, 
            ipSetId: ipSetId
        )
        return try await self.deleteIPSet(input, logger: logger)
    }

    /// Deletes invitations sent to the current member account by Amazon Web Services accounts specified by their account IDs.
    @Sendable
    @inlinable
    public func deleteInvitations(_ input: DeleteInvitationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInvitationsResponse {
        try await self.client.execute(
            operation: "DeleteInvitations", 
            path: "/invitation/delete", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes invitations sent to the current member account by Amazon Web Services accounts specified by their account IDs.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs of the Amazon Web Services accounts that sent invitations to the current member account that you want to delete invitations from.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInvitations(
        accountIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInvitationsResponse {
        let input = DeleteInvitationsRequest(
            accountIds: accountIds
        )
        return try await self.deleteInvitations(input, logger: logger)
    }

    /// Deletes the Malware Protection plan ID associated with the Malware Protection plan resource. Use this API only when you no longer want to protect the resource associated with this Malware Protection plan ID.
    @Sendable
    @inlinable
    public func deleteMalwareProtectionPlan(_ input: DeleteMalwareProtectionPlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteMalwareProtectionPlan", 
            path: "/malware-protection-plan/{MalwareProtectionPlanId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the Malware Protection plan ID associated with the Malware Protection plan resource. Use this API only when you no longer want to protect the resource associated with this Malware Protection plan ID.
    ///
    /// Parameters:
    ///   - malwareProtectionPlanId: A unique identifier associated with Malware Protection plan resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMalwareProtectionPlan(
        malwareProtectionPlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteMalwareProtectionPlanRequest(
            malwareProtectionPlanId: malwareProtectionPlanId
        )
        return try await self.deleteMalwareProtectionPlan(input, logger: logger)
    }

    /// Deletes GuardDuty member accounts (to the current GuardDuty administrator account) specified by the account IDs. With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to disable GuardDuty for a member account in your organization.
    @Sendable
    @inlinable
    public func deleteMembers(_ input: DeleteMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteMembersResponse {
        try await self.client.execute(
            operation: "DeleteMembers", 
            path: "/detector/{DetectorId}/member/delete", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes GuardDuty member accounts (to the current GuardDuty administrator account) specified by the account IDs. With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to disable GuardDuty for a member account in your organization.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs of the GuardDuty member accounts that you want to delete.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account whose members you want to delete. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMembers(
        accountIds: [String]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteMembersResponse {
        let input = DeleteMembersRequest(
            accountIds: accountIds, 
            detectorId: detectorId
        )
        return try await self.deleteMembers(input, logger: logger)
    }

    /// Deletes the publishing definition with the specified destinationId.
    @Sendable
    @inlinable
    public func deletePublishingDestination(_ input: DeletePublishingDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeletePublishingDestinationResponse {
        try await self.client.execute(
            operation: "DeletePublishingDestination", 
            path: "/detector/{DetectorId}/publishingDestination/{DestinationId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the publishing definition with the specified destinationId.
    ///
    /// Parameters:
    ///   - destinationId: The ID of the publishing destination to delete.
    ///   - detectorId: The unique ID of the detector associated with the publishing destination to delete. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func deletePublishingDestination(
        destinationId: String,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeletePublishingDestinationResponse {
        let input = DeletePublishingDestinationRequest(
            destinationId: destinationId, 
            detectorId: detectorId
        )
        return try await self.deletePublishingDestination(input, logger: logger)
    }

    /// Deletes the threat entity set that is associated with the specified  threatEntitySetId.
    @Sendable
    @inlinable
    public func deleteThreatEntitySet(_ input: DeleteThreatEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteThreatEntitySetResponse {
        try await self.client.execute(
            operation: "DeleteThreatEntitySet", 
            path: "/detector/{DetectorId}/threatentityset/{ThreatEntitySetId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the threat entity set that is associated with the specified  threatEntitySetId.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector associated with the threat entity set resource. To find the detectorId in the current Region, see the
    ///   - threatEntitySetId: The unique ID that helps GuardDuty identify which threat entity set needs to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteThreatEntitySet(
        detectorId: String,
        threatEntitySetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteThreatEntitySetResponse {
        let input = DeleteThreatEntitySetRequest(
            detectorId: detectorId, 
            threatEntitySetId: threatEntitySetId
        )
        return try await self.deleteThreatEntitySet(input, logger: logger)
    }

    /// Deletes the ThreatIntelSet specified by the ThreatIntelSet ID.
    @Sendable
    @inlinable
    public func deleteThreatIntelSet(_ input: DeleteThreatIntelSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteThreatIntelSetResponse {
        try await self.client.execute(
            operation: "DeleteThreatIntelSet", 
            path: "/detector/{DetectorId}/threatintelset/{ThreatIntelSetId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the ThreatIntelSet specified by the ThreatIntelSet ID.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the threatIntelSet. To find the detectorId in the current Region, see the
    ///   - threatIntelSetId: The unique ID of the threatIntelSet that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteThreatIntelSet(
        detectorId: String,
        threatIntelSetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteThreatIntelSetResponse {
        let input = DeleteThreatIntelSetRequest(
            detectorId: detectorId, 
            threatIntelSetId: threatIntelSetId
        )
        return try await self.deleteThreatIntelSet(input, logger: logger)
    }

    /// Deletes the trusted entity set that is associated with the specified  trustedEntitySetId.
    @Sendable
    @inlinable
    public func deleteTrustedEntitySet(_ input: DeleteTrustedEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteTrustedEntitySetResponse {
        try await self.client.execute(
            operation: "DeleteTrustedEntitySet", 
            path: "/detector/{DetectorId}/trustedentityset/{TrustedEntitySetId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the trusted entity set that is associated with the specified  trustedEntitySetId.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector associated with the trusted entity set resource. To find the detectorId in the current Region, see the
    ///   - trustedEntitySetId: The unique ID that helps GuardDuty identify which trusted entity set needs to be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteTrustedEntitySet(
        detectorId: String,
        trustedEntitySetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteTrustedEntitySetResponse {
        let input = DeleteTrustedEntitySetRequest(
            detectorId: detectorId, 
            trustedEntitySetId: trustedEntitySetId
        )
        return try await self.deleteTrustedEntitySet(input, logger: logger)
    }

    /// Returns a list of malware scans. Each member account can view the malware scans for their own accounts. An administrator can view the malware scans for all the member accounts. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func describeMalwareScans(_ input: DescribeMalwareScansRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMalwareScansResponse {
        try await self.client.execute(
            operation: "DescribeMalwareScans", 
            path: "/detector/{DetectorId}/malware-scans", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of malware scans. Each member account can view the malware scans for their own accounts. An administrator can view the malware scans for all the member accounts. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that the request is associated with. To find the detectorId in the current Region, see the
    ///   - filterCriteria: Represents the criteria to be used in the filter for describing scan entries.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - sortCriteria: Represents the criteria used for sorting scan entries. The  attributeName is required and it must be scanStartTime.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMalwareScans(
        detectorId: String,
        filterCriteria: FilterCriteria? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sortCriteria: SortCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMalwareScansResponse {
        let input = DescribeMalwareScansRequest(
            detectorId: detectorId, 
            filterCriteria: filterCriteria, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sortCriteria: sortCriteria
        )
        return try await self.describeMalwareScans(input, logger: logger)
    }

    /// Returns information about the account selected as the delegated administrator for GuardDuty. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func describeOrganizationConfiguration(_ input: DescribeOrganizationConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeOrganizationConfigurationResponse {
        try await self.client.execute(
            operation: "DescribeOrganizationConfiguration", 
            path: "/detector/{DetectorId}/admin", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the account selected as the delegated administrator for GuardDuty. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID of the delegated administrator for which you need to retrieve the information. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeOrganizationConfiguration(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeOrganizationConfigurationResponse {
        let input = DescribeOrganizationConfigurationRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeOrganizationConfiguration(input, logger: logger)
    }

    /// Returns information about the publishing destination specified by the provided destinationId.
    @Sendable
    @inlinable
    public func describePublishingDestination(_ input: DescribePublishingDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePublishingDestinationResponse {
        try await self.client.execute(
            operation: "DescribePublishingDestination", 
            path: "/detector/{DetectorId}/publishingDestination/{DestinationId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the publishing destination specified by the provided destinationId.
    ///
    /// Parameters:
    ///   - destinationId: The ID of the publishing destination to retrieve.
    ///   - detectorId: The unique ID of the detector associated with the publishing destination to retrieve. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func describePublishingDestination(
        destinationId: String,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePublishingDestinationResponse {
        let input = DescribePublishingDestinationRequest(
            destinationId: destinationId, 
            detectorId: detectorId
        )
        return try await self.describePublishingDestination(input, logger: logger)
    }

    /// Removes the existing GuardDuty delegated administrator of the organization. Only the organization's management account can run this  API operation.
    @Sendable
    @inlinable
    public func disableOrganizationAdminAccount(_ input: DisableOrganizationAdminAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisableOrganizationAdminAccountResponse {
        try await self.client.execute(
            operation: "DisableOrganizationAdminAccount", 
            path: "/admin/disable", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the existing GuardDuty delegated administrator of the organization. Only the organization's management account can run this  API operation.
    ///
    /// Parameters:
    ///   - adminAccountId: The Amazon Web Services Account ID for the organizations account to be disabled as a GuardDuty delegated administrator.
    ///   - logger: Logger use during operation
    @inlinable
    public func disableOrganizationAdminAccount(
        adminAccountId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisableOrganizationAdminAccountResponse {
        let input = DisableOrganizationAdminAccountRequest(
            adminAccountId: adminAccountId
        )
        return try await self.disableOrganizationAdminAccount(input, logger: logger)
    }

    /// Disassociates the current GuardDuty member account from its administrator account. When you  disassociate an invited member from a GuardDuty delegated administrator, the member account details  obtained from the CreateMembers API, including the associated email addresses, are retained. This is  done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to disable GuardDuty in a member account.
    @Sendable
    @inlinable
    public func disassociateFromAdministratorAccount(_ input: DisassociateFromAdministratorAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateFromAdministratorAccountResponse {
        try await self.client.execute(
            operation: "DisassociateFromAdministratorAccount", 
            path: "/detector/{DetectorId}/administrator/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disassociates the current GuardDuty member account from its administrator account. When you  disassociate an invited member from a GuardDuty delegated administrator, the member account details  obtained from the CreateMembers API, including the associated email addresses, are retained. This is  done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to disable GuardDuty in a member account.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector of the GuardDuty member account.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateFromAdministratorAccount(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateFromAdministratorAccountResponse {
        let input = DisassociateFromAdministratorAccountRequest(
            detectorId: detectorId
        )
        return try await self.disassociateFromAdministratorAccount(input, logger: logger)
    }

    /// Disassociates the current GuardDuty member account from its administrator account. When you  disassociate an invited member from a GuardDuty delegated administrator, the member account details  obtained from the CreateMembers API, including the associated email addresses, are retained. This is  done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.
    @available(*, deprecated, message: "This operation is deprecated, use DisassociateFromAdministratorAccount instead")
    @Sendable
    @inlinable
    public func disassociateFromMasterAccount(_ input: DisassociateFromMasterAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateFromMasterAccountResponse {
        try await self.client.execute(
            operation: "DisassociateFromMasterAccount", 
            path: "/detector/{DetectorId}/master/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disassociates the current GuardDuty member account from its administrator account. When you  disassociate an invited member from a GuardDuty delegated administrator, the member account details  obtained from the CreateMembers API, including the associated email addresses, are retained. This is  done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector of the GuardDuty member account.
    ///   - logger: Logger use during operation
    @available(*, deprecated, message: "This operation is deprecated, use DisassociateFromAdministratorAccount instead")
    @inlinable
    public func disassociateFromMasterAccount(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateFromMasterAccountResponse {
        let input = DisassociateFromMasterAccountRequest(
            detectorId: detectorId
        )
        return try await self.disassociateFromMasterAccount(input, logger: logger)
    }

    /// Disassociates GuardDuty member accounts (from the current administrator account) specified by the account IDs. When you  disassociate an invited member from a GuardDuty delegated administrator, the member account details  obtained from the CreateMembers API, including the associated email addresses, are retained. This is  done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to disassociate a member account before removing them from your organization. If you disassociate a member account that was added by invitation, the member account details  obtained from this API, including the associated email addresses, will be retained.  This is done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  When the member accounts added through Organizations are later disassociated, you (administrator) can't invite them by calling the InviteMembers API. You can create an association with these member accounts again only by calling the CreateMembers API.
    @Sendable
    @inlinable
    public func disassociateMembers(_ input: DisassociateMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateMembersResponse {
        try await self.client.execute(
            operation: "DisassociateMembers", 
            path: "/detector/{DetectorId}/member/disassociate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disassociates GuardDuty member accounts (from the current administrator account) specified by the account IDs. When you  disassociate an invited member from a GuardDuty delegated administrator, the member account details  obtained from the CreateMembers API, including the associated email addresses, are retained. This is  done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to disassociate a member account before removing them from your organization. If you disassociate a member account that was added by invitation, the member account details  obtained from this API, including the associated email addresses, will be retained.  This is done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  When the member accounts added through Organizations are later disassociated, you (administrator) can't invite them by calling the InviteMembers API. You can create an association with these member accounts again only by calling the CreateMembers API.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs of the GuardDuty member accounts that you want to disassociate from the administrator account.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account whose members you want to disassociate from the administrator account.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateMembers(
        accountIds: [String]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateMembersResponse {
        let input = DisassociateMembersRequest(
            accountIds: accountIds, 
            detectorId: detectorId
        )
        return try await self.disassociateMembers(input, logger: logger)
    }

    /// Designates an Amazon Web Services account within the organization as your GuardDuty delegated administrator. Only the organization's management account can run this  API operation.
    @Sendable
    @inlinable
    public func enableOrganizationAdminAccount(_ input: EnableOrganizationAdminAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> EnableOrganizationAdminAccountResponse {
        try await self.client.execute(
            operation: "EnableOrganizationAdminAccount", 
            path: "/admin/enable", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Designates an Amazon Web Services account within the organization as your GuardDuty delegated administrator. Only the organization's management account can run this  API operation.
    ///
    /// Parameters:
    ///   - adminAccountId: The Amazon Web Services account ID for the organization account to be enabled as a GuardDuty delegated administrator.
    ///   - logger: Logger use during operation
    @inlinable
    public func enableOrganizationAdminAccount(
        adminAccountId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> EnableOrganizationAdminAccountResponse {
        let input = EnableOrganizationAdminAccountRequest(
            adminAccountId: adminAccountId
        )
        return try await self.enableOrganizationAdminAccount(input, logger: logger)
    }

    /// Provides the details of the GuardDuty administrator account associated with the current GuardDuty member account. Based on the type of account that runs this API, the following list shows how the API behavior varies:   When the GuardDuty administrator account runs this API, it will return success (HTTP 200) but no content.   When a member account runs this API, it will return the details of the GuardDuty administrator account that is associated with this calling member account.   When an individual account (not associated with an organization) runs this API, it will return success (HTTP 200) but no content.
    @Sendable
    @inlinable
    public func getAdministratorAccount(_ input: GetAdministratorAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAdministratorAccountResponse {
        try await self.client.execute(
            operation: "GetAdministratorAccount", 
            path: "/detector/{DetectorId}/administrator", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides the details of the GuardDuty administrator account associated with the current GuardDuty member account. Based on the type of account that runs this API, the following list shows how the API behavior varies:   When the GuardDuty administrator account runs this API, it will return success (HTTP 200) but no content.   When a member account runs this API, it will return the details of the GuardDuty administrator account that is associated with this calling member account.   When an individual account (not associated with an organization) runs this API, it will return success (HTTP 200) but no content.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector of the GuardDuty member account.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAdministratorAccount(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAdministratorAccountResponse {
        let input = GetAdministratorAccountRequest(
            detectorId: detectorId
        )
        return try await self.getAdministratorAccount(input, logger: logger)
    }

    /// Retrieves aggregated statistics for your account. If you are a GuardDuty administrator, you can retrieve the statistics for all the resources associated with the active member accounts in your organization who have enabled Runtime Monitoring and have the GuardDuty security agent running on their resources.
    @Sendable
    @inlinable
    public func getCoverageStatistics(_ input: GetCoverageStatisticsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCoverageStatisticsResponse {
        try await self.client.execute(
            operation: "GetCoverageStatistics", 
            path: "/detector/{DetectorId}/coverage/statistics", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves aggregated statistics for your account. If you are a GuardDuty administrator, you can retrieve the statistics for all the resources associated with the active member accounts in your organization who have enabled Runtime Monitoring and have the GuardDuty security agent running on their resources.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the GuardDuty detector. To find the detectorId in the current Region, see the
    ///   - filterCriteria: Represents the criteria used to filter the coverage statistics.
    ///   - statisticsType: Represents the statistics type used to aggregate the coverage details.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCoverageStatistics(
        detectorId: String,
        filterCriteria: CoverageFilterCriteria? = nil,
        statisticsType: [CoverageStatisticsType]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCoverageStatisticsResponse {
        let input = GetCoverageStatisticsRequest(
            detectorId: detectorId, 
            filterCriteria: filterCriteria, 
            statisticsType: statisticsType
        )
        return try await self.getCoverageStatistics(input, logger: logger)
    }

    /// Retrieves a GuardDuty detector specified by the detectorId. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func getDetector(_ input: GetDetectorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDetectorResponse {
        try await self.client.execute(
            operation: "GetDetector", 
            path: "/detector/{DetectorId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a GuardDuty detector specified by the detectorId. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that you want to get. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func getDetector(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDetectorResponse {
        let input = GetDetectorRequest(
            detectorId: detectorId
        )
        return try await self.getDetector(input, logger: logger)
    }

    /// Returns the details of the filter specified by the filter name.
    @Sendable
    @inlinable
    public func getFilter(_ input: GetFilterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFilterResponse {
        try await self.client.execute(
            operation: "GetFilter", 
            path: "/detector/{DetectorId}/filter/{FilterName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the details of the filter specified by the filter name.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with this filter. To find the detectorId in the current Region, see the
    ///   - filterName: The name of the filter you want to get.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFilter(
        detectorId: String,
        filterName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFilterResponse {
        let input = GetFilterRequest(
            detectorId: detectorId, 
            filterName: filterName
        )
        return try await self.getFilter(input, logger: logger)
    }

    /// Describes Amazon GuardDuty findings specified by finding IDs.
    @Sendable
    @inlinable
    public func getFindings(_ input: GetFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFindingsResponse {
        try await self.client.execute(
            operation: "GetFindings", 
            path: "/detector/{DetectorId}/findings/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes Amazon GuardDuty findings specified by finding IDs.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector that specifies the GuardDuty service whose findings you want to retrieve. To find the detectorId in the current Region, see the
    ///   - findingIds: The IDs of the findings that you want to retrieve.
    ///   - sortCriteria: Represents the criteria used for sorting findings.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFindings(
        detectorId: String,
        findingIds: [String]? = nil,
        sortCriteria: SortCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFindingsResponse {
        let input = GetFindingsRequest(
            detectorId: detectorId, 
            findingIds: findingIds, 
            sortCriteria: sortCriteria
        )
        return try await self.getFindings(input, logger: logger)
    }

    /// Lists GuardDuty findings statistics for the specified detector ID. You must provide either findingStatisticTypes or groupBy parameter, and not both. You can use the maxResults and orderBy parameters only when using groupBy. There might be regional differences because some flags might not be available in all the Regions where GuardDuty is currently supported. For more information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func getFindingsStatistics(_ input: GetFindingsStatisticsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFindingsStatisticsResponse {
        try await self.client.execute(
            operation: "GetFindingsStatistics", 
            path: "/detector/{DetectorId}/findings/statistics", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists GuardDuty findings statistics for the specified detector ID. You must provide either findingStatisticTypes or groupBy parameter, and not both. You can use the maxResults and orderBy parameters only when using groupBy. There might be regional differences because some flags might not be available in all the Regions where GuardDuty is currently supported. For more information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector whose findings statistics you want to retrieve. To find the detectorId in the current Region, see the
    ///   - findingCriteria: Represents the criteria that is used for querying findings.
    ///   - groupBy: Displays the findings statistics grouped by one of the listed valid values.
    ///   - maxResults: The maximum number of results to be returned in the response. The default value is 25. You can use this parameter only with the groupBy parameter.
    ///   - orderBy: Displays the sorted findings in the requested order. The default value of orderBy is DESC. You can use this parameter only with the groupBy parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFindingsStatistics(
        detectorId: String,
        findingCriteria: FindingCriteria? = nil,
        groupBy: GroupByType? = nil,
        maxResults: Int? = nil,
        orderBy: OrderBy? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFindingsStatisticsResponse {
        let input = GetFindingsStatisticsRequest(
            detectorId: detectorId, 
            findingCriteria: findingCriteria, 
            groupBy: groupBy, 
            maxResults: maxResults, 
            orderBy: orderBy
        )
        return try await self.getFindingsStatistics(input, logger: logger)
    }

    /// Retrieves the IPSet specified by the ipSetId.
    @Sendable
    @inlinable
    public func getIPSet(_ input: GetIPSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetIPSetResponse {
        try await self.client.execute(
            operation: "GetIPSet", 
            path: "/detector/{DetectorId}/ipset/{IpSetId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the IPSet specified by the ipSetId.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the IPSet. To find the detectorId in the current Region, see the
    ///   - ipSetId: The unique ID of the IPSet to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getIPSet(
        detectorId: String,
        ipSetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetIPSetResponse {
        let input = GetIPSetRequest(
            detectorId: detectorId, 
            ipSetId: ipSetId
        )
        return try await self.getIPSet(input, logger: logger)
    }

    /// Returns the count of all GuardDuty membership invitations that were sent to the current member account except the currently accepted invitation.
    @Sendable
    @inlinable
    public func getInvitationsCount(_ input: GetInvitationsCountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInvitationsCountResponse {
        try await self.client.execute(
            operation: "GetInvitationsCount", 
            path: "/invitation/count", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the count of all GuardDuty membership invitations that were sent to the current member account except the currently accepted invitation.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getInvitationsCount(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInvitationsCountResponse {
        let input = GetInvitationsCountRequest(
        )
        return try await self.getInvitationsCount(input, logger: logger)
    }

    /// Retrieves the Malware Protection plan details associated with a Malware Protection plan ID.
    @Sendable
    @inlinable
    public func getMalwareProtectionPlan(_ input: GetMalwareProtectionPlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMalwareProtectionPlanResponse {
        try await self.client.execute(
            operation: "GetMalwareProtectionPlan", 
            path: "/malware-protection-plan/{MalwareProtectionPlanId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the Malware Protection plan details associated with a Malware Protection plan ID.
    ///
    /// Parameters:
    ///   - malwareProtectionPlanId: A unique identifier associated with Malware Protection plan resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMalwareProtectionPlan(
        malwareProtectionPlanId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMalwareProtectionPlanResponse {
        let input = GetMalwareProtectionPlanRequest(
            malwareProtectionPlanId: malwareProtectionPlanId
        )
        return try await self.getMalwareProtectionPlan(input, logger: logger)
    }

    /// Returns the details of the malware scan settings. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func getMalwareScanSettings(_ input: GetMalwareScanSettingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMalwareScanSettingsResponse {
        try await self.client.execute(
            operation: "GetMalwareScanSettings", 
            path: "/detector/{DetectorId}/malware-scan-settings", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the details of the malware scan settings. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with this scan. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func getMalwareScanSettings(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMalwareScanSettingsResponse {
        let input = GetMalwareScanSettingsRequest(
            detectorId: detectorId
        )
        return try await self.getMalwareScanSettings(input, logger: logger)
    }

    /// Provides the details for the GuardDuty administrator account associated with the current GuardDuty member account.
    @available(*, deprecated, message: "This operation is deprecated, use GetAdministratorAccount instead")
    @Sendable
    @inlinable
    public func getMasterAccount(_ input: GetMasterAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMasterAccountResponse {
        try await self.client.execute(
            operation: "GetMasterAccount", 
            path: "/detector/{DetectorId}/master", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides the details for the GuardDuty administrator account associated with the current GuardDuty member account.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector of the GuardDuty member account. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @available(*, deprecated, message: "This operation is deprecated, use GetAdministratorAccount instead")
    @inlinable
    public func getMasterAccount(
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMasterAccountResponse {
        let input = GetMasterAccountRequest(
            detectorId: detectorId
        )
        return try await self.getMasterAccount(input, logger: logger)
    }

    /// Describes which data sources are enabled for the member account's detector. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func getMemberDetectors(_ input: GetMemberDetectorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMemberDetectorsResponse {
        try await self.client.execute(
            operation: "GetMemberDetectors", 
            path: "/detector/{DetectorId}/member/detector/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes which data sources are enabled for the member account's detector. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - accountIds: A list of member account IDs.
    ///   - detectorId: The detector ID for the administrator account. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func getMemberDetectors(
        accountIds: [String]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMemberDetectorsResponse {
        let input = GetMemberDetectorsRequest(
            accountIds: accountIds, 
            detectorId: detectorId
        )
        return try await self.getMemberDetectors(input, logger: logger)
    }

    /// Retrieves GuardDuty member accounts (of the current GuardDuty administrator account) specified by the account IDs.
    @Sendable
    @inlinable
    public func getMembers(_ input: GetMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMembersResponse {
        try await self.client.execute(
            operation: "GetMembers", 
            path: "/detector/{DetectorId}/member/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves GuardDuty member accounts (of the current GuardDuty administrator account) specified by the account IDs.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs of the GuardDuty member accounts that you want to describe.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account whose members you want to retrieve. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func getMembers(
        accountIds: [String]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMembersResponse {
        let input = GetMembersRequest(
            accountIds: accountIds, 
            detectorId: detectorId
        )
        return try await self.getMembers(input, logger: logger)
    }

    /// Retrieves how many active member accounts have each feature enabled within GuardDuty. Only a delegated GuardDuty administrator of an organization can run this API. When you create a new organization, it might take up to 24  hours to generate the statistics for the entire organization.
    @Sendable
    @inlinable
    public func getOrganizationStatistics(logger: Logger = AWSClient.loggingDisabled) async throws -> GetOrganizationStatisticsResponse {
        try await self.client.execute(
            operation: "GetOrganizationStatistics", 
            path: "/organization/statistics", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            logger: logger
        )
    }

    /// Provides the number of days left for each data source used in the free trial period.
    @Sendable
    @inlinable
    public func getRemainingFreeTrialDays(_ input: GetRemainingFreeTrialDaysRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRemainingFreeTrialDaysResponse {
        try await self.client.execute(
            operation: "GetRemainingFreeTrialDays", 
            path: "/detector/{DetectorId}/freeTrial/daysRemaining", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides the number of days left for each data source used in the free trial period.
    ///
    /// Parameters:
    ///   - accountIds: A list of account identifiers of the GuardDuty member account.
    ///   - detectorId: The unique ID of the detector of the GuardDuty member account. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func getRemainingFreeTrialDays(
        accountIds: [String]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRemainingFreeTrialDaysResponse {
        let input = GetRemainingFreeTrialDaysRequest(
            accountIds: accountIds, 
            detectorId: detectorId
        )
        return try await self.getRemainingFreeTrialDays(input, logger: logger)
    }

    /// Retrieves the threat entity set associated with the specified threatEntitySetId.
    @Sendable
    @inlinable
    public func getThreatEntitySet(_ input: GetThreatEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetThreatEntitySetResponse {
        try await self.client.execute(
            operation: "GetThreatEntitySet", 
            path: "/detector/{DetectorId}/threatentityset/{ThreatEntitySetId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the threat entity set associated with the specified threatEntitySetId.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector associated with the threat entity set resource. To find the detectorId in the current Region, see the
    ///   - threatEntitySetId: The unique ID that helps GuardDuty identify the threat entity set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getThreatEntitySet(
        detectorId: String,
        threatEntitySetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetThreatEntitySetResponse {
        let input = GetThreatEntitySetRequest(
            detectorId: detectorId, 
            threatEntitySetId: threatEntitySetId
        )
        return try await self.getThreatEntitySet(input, logger: logger)
    }

    /// Retrieves the ThreatIntelSet that is specified by the ThreatIntelSet ID.
    @Sendable
    @inlinable
    public func getThreatIntelSet(_ input: GetThreatIntelSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetThreatIntelSetResponse {
        try await self.client.execute(
            operation: "GetThreatIntelSet", 
            path: "/detector/{DetectorId}/threatintelset/{ThreatIntelSetId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the ThreatIntelSet that is specified by the ThreatIntelSet ID.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the threatIntelSet. To find the detectorId in the current Region, see the
    ///   - threatIntelSetId: The unique ID of the threatIntelSet that you want to get.
    ///   - logger: Logger use during operation
    @inlinable
    public func getThreatIntelSet(
        detectorId: String,
        threatIntelSetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetThreatIntelSetResponse {
        let input = GetThreatIntelSetRequest(
            detectorId: detectorId, 
            threatIntelSetId: threatIntelSetId
        )
        return try await self.getThreatIntelSet(input, logger: logger)
    }

    /// Retrieves the trusted entity set associated with the specified trustedEntitySetId.
    @Sendable
    @inlinable
    public func getTrustedEntitySet(_ input: GetTrustedEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetTrustedEntitySetResponse {
        try await self.client.execute(
            operation: "GetTrustedEntitySet", 
            path: "/detector/{DetectorId}/trustedentityset/{TrustedEntitySetId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the trusted entity set associated with the specified trustedEntitySetId.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the GuardDuty detector associated with this trusted entity set.
    ///   - trustedEntitySetId: The unique ID that helps GuardDuty identify the trusted entity set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getTrustedEntitySet(
        detectorId: String,
        trustedEntitySetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetTrustedEntitySetResponse {
        let input = GetTrustedEntitySetRequest(
            detectorId: detectorId, 
            trustedEntitySetId: trustedEntitySetId
        )
        return try await self.getTrustedEntitySet(input, logger: logger)
    }

    /// Lists Amazon GuardDuty usage statistics over the last 30 days for the specified detector ID. For newly enabled detectors or data sources, the cost returned will include only the usage so far under 30 days. This may differ from the cost metrics in the console, which project usage over 30 days to provide a monthly cost estimate. For more information, see Understanding How Usage Costs are Calculated.
    @Sendable
    @inlinable
    public func getUsageStatistics(_ input: GetUsageStatisticsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetUsageStatisticsResponse {
        try await self.client.execute(
            operation: "GetUsageStatistics", 
            path: "/detector/{DetectorId}/usage/statistics", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists Amazon GuardDuty usage statistics over the last 30 days for the specified detector ID. For newly enabled detectors or data sources, the cost returned will include only the usage so far under 30 days. This may differ from the cost metrics in the console, which project usage over 30 days to provide a monthly cost estimate. For more information, see Understanding How Usage Costs are Calculated.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector that specifies the GuardDuty service whose usage statistics you want to retrieve. To find the detectorId in the current Region, see the
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - nextToken: A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.
    ///   - unit: The currency unit you would like to view your usage statistics in. Current valid values are USD.
    ///   - usageCriteria: Represents the criteria used for querying usage.
    ///   - usageStatisticType: The type of usage statistics to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUsageStatistics(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        unit: String? = nil,
        usageCriteria: UsageCriteria? = nil,
        usageStatisticType: UsageStatisticType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetUsageStatisticsResponse {
        let input = GetUsageStatisticsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            unit: unit, 
            usageCriteria: usageCriteria, 
            usageStatisticType: usageStatisticType
        )
        return try await self.getUsageStatistics(input, logger: logger)
    }

    /// Invites Amazon Web Services accounts to become members of an organization administered by the Amazon Web Services account  that invokes this API. If you are using Amazon Web Services Organizations to manage your GuardDuty environment, this step is not needed. For more information, see Managing accounts with organizations. To invite Amazon Web Services accounts, the first step is  to ensure that GuardDuty has been enabled in the potential member accounts. You can now invoke this API to add accounts by invitation. The  invited accounts can either accept or decline the invitation from their GuardDuty accounts. Each invited Amazon Web Services account can  choose to accept the invitation from only one Amazon Web Services account. For more information, see  Managing GuardDuty accounts  by invitation. After the invite has been accepted and you choose to disassociate a member account  (by using DisassociateMembers) from your account,  the details of the member account obtained by invoking CreateMembers, including the  associated email addresses, will be retained.  This is done so that you can invoke InviteMembers without the need to invoke  CreateMembers again. To  remove the details associated with a member account, you must also invoke  DeleteMembers.  If you disassociate a member account that was added by invitation, the member account details  obtained from this API, including the associated email addresses, will be retained.  This is done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  When the member accounts added through Organizations are later disassociated, you (administrator) can't invite them by calling the InviteMembers API. You can create an association with these member accounts again only by calling the CreateMembers API.
    @Sendable
    @inlinable
    public func inviteMembers(_ input: InviteMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> InviteMembersResponse {
        try await self.client.execute(
            operation: "InviteMembers", 
            path: "/detector/{DetectorId}/member/invite", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Invites Amazon Web Services accounts to become members of an organization administered by the Amazon Web Services account  that invokes this API. If you are using Amazon Web Services Organizations to manage your GuardDuty environment, this step is not needed. For more information, see Managing accounts with organizations. To invite Amazon Web Services accounts, the first step is  to ensure that GuardDuty has been enabled in the potential member accounts. You can now invoke this API to add accounts by invitation. The  invited accounts can either accept or decline the invitation from their GuardDuty accounts. Each invited Amazon Web Services account can  choose to accept the invitation from only one Amazon Web Services account. For more information, see  Managing GuardDuty accounts  by invitation. After the invite has been accepted and you choose to disassociate a member account  (by using DisassociateMembers) from your account,  the details of the member account obtained by invoking CreateMembers, including the  associated email addresses, will be retained.  This is done so that you can invoke InviteMembers without the need to invoke  CreateMembers again. To  remove the details associated with a member account, you must also invoke  DeleteMembers.  If you disassociate a member account that was added by invitation, the member account details  obtained from this API, including the associated email addresses, will be retained.  This is done so that the delegated administrator can invoke the InviteMembers API without the need to invoke the CreateMembers API again. To  remove the details associated with a member account, the delegated administrator must invoke the  DeleteMembers API.  When the member accounts added through Organizations are later disassociated, you (administrator) can't invite them by calling the InviteMembers API. You can create an association with these member accounts again only by calling the CreateMembers API.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs of the accounts that you want to invite to GuardDuty as members.
    ///   - detectorId: The unique ID of the detector of the GuardDuty account with which you want to invite members. To find the detectorId in the current Region, see the
    ///   - disableEmailNotification: A Boolean value that specifies whether you want to disable email notification to the accounts that you are inviting to GuardDuty as members.
    ///   - message: The invitation message that you want to send to the accounts that you're inviting to GuardDuty as members.
    ///   - logger: Logger use during operation
    @inlinable
    public func inviteMembers(
        accountIds: [String]? = nil,
        detectorId: String,
        disableEmailNotification: Bool? = nil,
        message: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> InviteMembersResponse {
        let input = InviteMembersRequest(
            accountIds: accountIds, 
            detectorId: detectorId, 
            disableEmailNotification: disableEmailNotification, 
            message: message
        )
        return try await self.inviteMembers(input, logger: logger)
    }

    /// Lists coverage details for your GuardDuty account. If you're a GuardDuty administrator, you can retrieve all resources associated with the active member accounts in your organization. Make sure the accounts have Runtime Monitoring enabled and GuardDuty agent running on their resources.
    @Sendable
    @inlinable
    public func listCoverage(_ input: ListCoverageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCoverageResponse {
        try await self.client.execute(
            operation: "ListCoverage", 
            path: "/detector/{DetectorId}/coverage", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists coverage details for your GuardDuty account. If you're a GuardDuty administrator, you can retrieve all resources associated with the active member accounts in your organization. Make sure the accounts have Runtime Monitoring enabled and GuardDuty agent running on their resources.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector whose coverage details you want to retrieve. To find the detectorId in the current Region, see the
    ///   - filterCriteria: Represents the criteria used to filter the coverage details.
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - nextToken: A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.
    ///   - sortCriteria: Represents the criteria used to sort the coverage details.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCoverage(
        detectorId: String,
        filterCriteria: CoverageFilterCriteria? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sortCriteria: CoverageSortCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCoverageResponse {
        let input = ListCoverageRequest(
            detectorId: detectorId, 
            filterCriteria: filterCriteria, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sortCriteria: sortCriteria
        )
        return try await self.listCoverage(input, logger: logger)
    }

    /// Lists detectorIds of all the existing Amazon GuardDuty detector resources.
    @Sendable
    @inlinable
    public func listDetectors(_ input: ListDetectorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDetectorsResponse {
        try await self.client.execute(
            operation: "ListDetectors", 
            path: "/detector", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists detectorIds of all the existing Amazon GuardDuty detector resources.
    ///
    /// Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDetectors(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDetectorsResponse {
        let input = ListDetectorsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDetectors(input, logger: logger)
    }

    /// Returns a paginated list of the current filters.
    @Sendable
    @inlinable
    public func listFilters(_ input: ListFiltersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFiltersResponse {
        try await self.client.execute(
            operation: "ListFilters", 
            path: "/detector/{DetectorId}/filter", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a paginated list of the current filters.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the filter. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFilters(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFiltersResponse {
        let input = ListFiltersRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listFilters(input, logger: logger)
    }

    /// Lists GuardDuty findings for the specified detector ID. There might be regional differences because some flags might not be available in all the Regions where GuardDuty is currently supported. For more information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func listFindings(_ input: ListFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFindingsResponse {
        try await self.client.execute(
            operation: "ListFindings", 
            path: "/detector/{DetectorId}/findings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists GuardDuty findings for the specified detector ID. There might be regional differences because some flags might not be available in all the Regions where GuardDuty is currently supported. For more information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector that specifies the GuardDuty service whose findings you want to list. To find the detectorId in the current Region, see the
    ///   - findingCriteria: Represents the criteria used for querying findings. Valid values include:   JSON field name   accountId   region   confidence   id   resource.accessKeyDetails.accessKeyId   resource.accessKeyDetails.principalId   resource.accessKeyDetails.userName   resource.accessKeyDetails.userType   resource.instanceDetails.iamInstanceProfile.id   resource.instanceDetails.imageId   resource.instanceDetails.instanceId   resource.instanceDetails.networkInterfaces.ipv6Addresses   resource.instanceDetails.networkInterfaces.privateIpAddresses.privateIpAddress   resource.instanceDetails.networkInterfaces.publicDnsName   resource.instanceDetails.networkInterfaces.publicIp   resource.instanceDetails.networkInterfaces.securityGroups.groupId   resource.instanceDetails.networkInterfaces.securityGroups.groupName   resource.instanceDetails.networkInterfaces.subnetId   resource.instanceDetails.networkInterfaces.vpcId   resource.instanceDetails.tags.key   resource.instanceDetails.tags.value   resource.resourceType   service.action.actionType   service.action.awsApiCallAction.api   service.action.awsApiCallAction.callerType   service.action.awsApiCallAction.remoteIpDetails.city.cityName   service.action.awsApiCallAction.remoteIpDetails.country.countryName   service.action.awsApiCallAction.remoteIpDetails.ipAddressV4   service.action.awsApiCallAction.remoteIpDetails.organization.asn   service.action.awsApiCallAction.remoteIpDetails.organization.asnOrg   service.action.awsApiCallAction.serviceName   service.action.dnsRequestAction.domain   service.action.dnsRequestAction.domainWithSuffix   service.action.networkConnectionAction.blocked   service.action.networkConnectionAction.connectionDirection   service.action.networkConnectionAction.localPortDetails.port   service.action.networkConnectionAction.protocol   service.action.networkConnectionAction.remoteIpDetails.country.countryName   service.action.networkConnectionAction.remoteIpDetails.ipAddressV4   service.action.networkConnectionAction.remoteIpDetails.organization.asn   service.action.networkConnectionAction.remoteIpDetails.organization.asnOrg   service.action.networkConnectionAction.remotePortDetails.port   service.additionalInfo.threatListName   service.archived When this attribute is set to 'true', only archived findings are listed. When it's set to 'false', only unarchived findings are listed. When this attribute is not set, all existing findings are listed.   service.ebsVolumeScanDetails.scanId   service.resourceRole   severity   type   updatedAt Type: Timestamp in Unix Epoch millisecond format: 1486685375000
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - sortCriteria: Represents the criteria used for sorting findings.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFindings(
        detectorId: String,
        findingCriteria: FindingCriteria? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        sortCriteria: SortCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFindingsResponse {
        let input = ListFindingsRequest(
            detectorId: detectorId, 
            findingCriteria: findingCriteria, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            sortCriteria: sortCriteria
        )
        return try await self.listFindings(input, logger: logger)
    }

    /// Lists the IPSets of the GuardDuty service specified by the detector ID. If you use this operation from a member account, the IPSets returned are the IPSets from the associated administrator account.
    @Sendable
    @inlinable
    public func listIPSets(_ input: ListIPSetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListIPSetsResponse {
        try await self.client.execute(
            operation: "ListIPSets", 
            path: "/detector/{DetectorId}/ipset", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the IPSets of the GuardDuty service specified by the detector ID. If you use this operation from a member account, the IPSets returned are the IPSets from the associated administrator account.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with IPSet. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listIPSets(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListIPSetsResponse {
        let input = ListIPSetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listIPSets(input, logger: logger)
    }

    /// Lists all GuardDuty membership invitations that were sent to the current Amazon Web Services account.
    @Sendable
    @inlinable
    public func listInvitations(_ input: ListInvitationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListInvitationsResponse {
        try await self.client.execute(
            operation: "ListInvitations", 
            path: "/invitation", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all GuardDuty membership invitations that were sent to the current Amazon Web Services account.
    ///
    /// Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listInvitations(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListInvitationsResponse {
        let input = ListInvitationsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listInvitations(input, logger: logger)
    }

    /// Lists the Malware Protection plan IDs associated with the protected resources in your Amazon Web Services account.
    @Sendable
    @inlinable
    public func listMalwareProtectionPlans(_ input: ListMalwareProtectionPlansRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMalwareProtectionPlansResponse {
        try await self.client.execute(
            operation: "ListMalwareProtectionPlans", 
            path: "/malware-protection-plan", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the Malware Protection plan IDs associated with the protected resources in your Amazon Web Services account.
    ///
    /// Parameters:
    ///   - nextToken: You can use this parameter when paginating results. Set the value  of this parameter to null on your first call to the list action.  For subsequent calls to the action, fill nextToken in the request  with the value of NextToken from the previous response to  continue listing data. The default page size is 100 plans.
    ///   - logger: Logger use during operation
    @inlinable
    public func listMalwareProtectionPlans(
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMalwareProtectionPlansResponse {
        let input = ListMalwareProtectionPlansRequest(
            nextToken: nextToken
        )
        return try await self.listMalwareProtectionPlans(input, logger: logger)
    }

    /// Lists details about all member accounts for the current GuardDuty administrator account.
    @Sendable
    @inlinable
    public func listMembers(_ input: ListMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListMembersResponse {
        try await self.client.execute(
            operation: "ListMembers", 
            path: "/detector/{DetectorId}/member", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists details about all member accounts for the current GuardDuty administrator account.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the member. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - onlyAssociated: Specifies whether to only return associated members or to return all members (including members who haven't been invited yet or have been disassociated). Member accounts must have been previously associated with the GuardDuty administrator account using  Create Members .
    ///   - logger: Logger use during operation
    @inlinable
    public func listMembers(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        onlyAssociated: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListMembersResponse {
        let input = ListMembersRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            onlyAssociated: onlyAssociated
        )
        return try await self.listMembers(input, logger: logger)
    }

    /// Lists the accounts designated as GuardDuty delegated administrators.  Only the organization's management account can run this  API operation.
    @Sendable
    @inlinable
    public func listOrganizationAdminAccounts(_ input: ListOrganizationAdminAccountsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOrganizationAdminAccountsResponse {
        try await self.client.execute(
            operation: "ListOrganizationAdminAccounts", 
            path: "/admin", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the accounts designated as GuardDuty delegated administrators.  Only the organization's management account can run this  API operation.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - nextToken: A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOrganizationAdminAccounts(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOrganizationAdminAccountsResponse {
        let input = ListOrganizationAdminAccountsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listOrganizationAdminAccounts(input, logger: logger)
    }

    /// Returns a list of publishing destinations associated with the specified detectorId.
    @Sendable
    @inlinable
    public func listPublishingDestinations(_ input: ListPublishingDestinationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPublishingDestinationsResponse {
        try await self.client.execute(
            operation: "ListPublishingDestinations", 
            path: "/detector/{DetectorId}/publishingDestination", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of publishing destinations associated with the specified detectorId.
    ///
    /// Parameters:
    ///   - detectorId: The detector ID for which you want to retrieve the publishing destination. To find the detectorId in the current Region, see the
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - nextToken: A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request to a list action. For subsequent calls, use the NextToken value returned from the previous request to continue listing results after the first page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPublishingDestinations(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPublishingDestinationsResponse {
        let input = ListPublishingDestinationsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listPublishingDestinations(input, logger: logger)
    }

    /// Lists tags for a resource. Tagging is currently supported for detectors, finding filters, IP sets, threat intel sets, and publishing destination, with a limit of 50 tags per resource.  When invoked, this operation returns all assigned tags for a given resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists tags for a resource. Tagging is currently supported for detectors, finding filters, IP sets, threat intel sets, and publishing destination, with a limit of 50 tags per resource.  When invoked, this operation returns all assigned tags for a given resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) for the given GuardDuty resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Lists the threat entity sets associated with the specified GuardDuty detector ID. If you use this operation from a member account, the threat entity sets that are returned as a response, belong to the  administrator account.
    @Sendable
    @inlinable
    public func listThreatEntitySets(_ input: ListThreatEntitySetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListThreatEntitySetsResponse {
        try await self.client.execute(
            operation: "ListThreatEntitySets", 
            path: "/detector/{DetectorId}/threatentityset", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the threat entity sets associated with the specified GuardDuty detector ID. If you use this operation from a member account, the threat entity sets that are returned as a response, belong to the  administrator account.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the GuardDuty detector that is associated with this threat entity set. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of  items you want in the response. The default value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value  of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request  with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listThreatEntitySets(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListThreatEntitySetsResponse {
        let input = ListThreatEntitySetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listThreatEntitySets(input, logger: logger)
    }

    /// Lists the ThreatIntelSets of the GuardDuty service specified by the detector ID. If you use this operation from a member account, the ThreatIntelSets associated with the administrator account are returned.
    @Sendable
    @inlinable
    public func listThreatIntelSets(_ input: ListThreatIntelSetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListThreatIntelSetsResponse {
        try await self.client.execute(
            operation: "ListThreatIntelSets", 
            path: "/detector/{DetectorId}/threatintelset", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the ThreatIntelSets of the GuardDuty service specified by the detector ID. If you use this operation from a member account, the ThreatIntelSets associated with the administrator account are returned.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the threatIntelSet. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - nextToken: You can use this parameter to paginate results in the response. Set the value of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listThreatIntelSets(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListThreatIntelSetsResponse {
        let input = ListThreatIntelSetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listThreatIntelSets(input, logger: logger)
    }

    /// Lists the trusted entity sets associated with the specified GuardDuty detector ID. If you use this operation from a member account, the trusted entity sets that are returned as a response, belong to the  administrator account.
    @Sendable
    @inlinable
    public func listTrustedEntitySets(_ input: ListTrustedEntitySetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTrustedEntitySetsResponse {
        try await self.client.execute(
            operation: "ListTrustedEntitySets", 
            path: "/detector/{DetectorId}/trustedentityset", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the trusted entity sets associated with the specified GuardDuty detector ID. If you use this operation from a member account, the trusted entity sets that are returned as a response, belong to the  administrator account.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the GuardDuty detector that is associated with this threat entity set. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of  items you want in the response. The default value is 50.
    ///   - nextToken: You can use this parameter when paginating results. Set the value  of this parameter to null on your first call to the list action. For subsequent calls to the action, fill nextToken in the request  with the value of NextToken from the previous response to continue listing data.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTrustedEntitySets(
        detectorId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTrustedEntitySetsResponse {
        let input = ListTrustedEntitySetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listTrustedEntitySets(input, logger: logger)
    }

    /// Initiates the malware scan. Invoking this API will automatically create the Service-linked role in  the corresponding account. When the malware scan starts, you can use the associated scan ID to track the status of the scan. For more information, see DescribeMalwareScans.
    @Sendable
    @inlinable
    public func startMalwareScan(_ input: StartMalwareScanRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartMalwareScanResponse {
        try await self.client.execute(
            operation: "StartMalwareScan", 
            path: "/malware-scan/start", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initiates the malware scan. Invoking this API will automatically create the Service-linked role in  the corresponding account. When the malware scan starts, you can use the associated scan ID to track the status of the scan. For more information, see DescribeMalwareScans.
    ///
    /// Parameters:
    ///   - resourceArn: Amazon Resource Name (ARN) of the resource for which you invoked the API.
    ///   - logger: Logger use during operation
    @inlinable
    public func startMalwareScan(
        resourceArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartMalwareScanResponse {
        let input = StartMalwareScanRequest(
            resourceArn: resourceArn
        )
        return try await self.startMalwareScan(input, logger: logger)
    }

    /// Turns on GuardDuty monitoring of the specified member accounts. Use this operation to restart monitoring of accounts that you stopped monitoring with the StopMonitoringMembers operation.
    @Sendable
    @inlinable
    public func startMonitoringMembers(_ input: StartMonitoringMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartMonitoringMembersResponse {
        try await self.client.execute(
            operation: "StartMonitoringMembers", 
            path: "/detector/{DetectorId}/member/start", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Turns on GuardDuty monitoring of the specified member accounts. Use this operation to restart monitoring of accounts that you stopped monitoring with the StopMonitoringMembers operation.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs of the GuardDuty member accounts to start monitoring.
    ///   - detectorId: The unique ID of the detector of the GuardDuty administrator account associated with the member accounts to monitor. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func startMonitoringMembers(
        accountIds: [String]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartMonitoringMembersResponse {
        let input = StartMonitoringMembersRequest(
            accountIds: accountIds, 
            detectorId: detectorId
        )
        return try await self.startMonitoringMembers(input, logger: logger)
    }

    /// Stops GuardDuty monitoring for the specified member accounts. Use the StartMonitoringMembers operation to restart monitoring for those accounts. With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to stop monitoring the member accounts in your organization.
    @Sendable
    @inlinable
    public func stopMonitoringMembers(_ input: StopMonitoringMembersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopMonitoringMembersResponse {
        try await self.client.execute(
            operation: "StopMonitoringMembers", 
            path: "/detector/{DetectorId}/member/stop", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops GuardDuty monitoring for the specified member accounts. Use the StartMonitoringMembers operation to restart monitoring for those accounts. With autoEnableOrganizationMembers configuration for your organization set to ALL, you'll receive an error if you attempt to stop monitoring the member accounts in your organization.
    ///
    /// Parameters:
    ///   - accountIds: A list of account IDs for the member accounts to stop monitoring.
    ///   - detectorId: The unique ID of the detector associated with the GuardDuty administrator account that is monitoring member accounts. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func stopMonitoringMembers(
        accountIds: [String]? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopMonitoringMembersResponse {
        let input = StopMonitoringMembersRequest(
            accountIds: accountIds, 
            detectorId: detectorId
        )
        return try await self.stopMonitoringMembers(input, logger: logger)
    }

    /// Adds tags to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds tags to a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) for the GuardDuty resource to apply a tag to.
    ///   - tags: The tags to be added to a resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [String: String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Unarchives GuardDuty findings specified by the findingIds.
    @Sendable
    @inlinable
    public func unarchiveFindings(_ input: UnarchiveFindingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UnarchiveFindingsResponse {
        try await self.client.execute(
            operation: "UnarchiveFindings", 
            path: "/detector/{DetectorId}/findings/unarchive", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Unarchives GuardDuty findings specified by the findingIds.
    ///
    /// Parameters:
    ///   - detectorId: The ID of the detector associated with the findings to unarchive. To find the detectorId in the current Region, see the
    ///   - findingIds: The IDs of the findings to unarchive.
    ///   - logger: Logger use during operation
    @inlinable
    public func unarchiveFindings(
        detectorId: String,
        findingIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UnarchiveFindingsResponse {
        let input = UnarchiveFindingsRequest(
            detectorId: detectorId, 
            findingIds: findingIds
        )
        return try await self.unarchiveFindings(input, logger: logger)
    }

    /// Removes tags from a resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/tags/{ResourceArn}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes tags from a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) for the resource to remove tags from.
    ///   - tagKeys: The tag keys to remove from the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates the GuardDuty detector specified by the detector ID. Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func updateDetector(_ input: UpdateDetectorRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDetectorResponse {
        try await self.client.execute(
            operation: "UpdateDetector", 
            path: "/detector/{DetectorId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the GuardDuty detector specified by the detector ID. Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector to update. To find the detectorId in the current Region, see the
    ///   - enable: Specifies whether the detector is enabled or not enabled.
    ///   - features: Provides the features that will be updated for the detector.
    ///   - findingPublishingFrequency: An enum value that specifies how frequently findings are exported, such as to CloudWatch Events.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDetector(
        detectorId: String,
        enable: Bool? = nil,
        features: [DetectorFeatureConfiguration]? = nil,
        findingPublishingFrequency: FindingPublishingFrequency? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDetectorResponse {
        let input = UpdateDetectorRequest(
            detectorId: detectorId, 
            enable: enable, 
            features: features, 
            findingPublishingFrequency: findingPublishingFrequency
        )
        return try await self.updateDetector(input, logger: logger)
    }

    /// Updates the filter specified by the filter name.
    @Sendable
    @inlinable
    public func updateFilter(_ input: UpdateFilterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFilterResponse {
        try await self.client.execute(
            operation: "UpdateFilter", 
            path: "/detector/{DetectorId}/filter/{FilterName}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the filter specified by the filter name.
    ///
    /// Parameters:
    ///   - action: Specifies the action that is to be applied to the findings that match the filter.
    ///   - description: The description of the filter. Valid characters include alphanumeric characters, and special characters such as hyphen, period, colon, underscore, parentheses ({ }, [ ], and ( )), forward slash, horizontal tab, vertical tab, newline, form feed, return, and whitespace.
    ///   - detectorId: The unique ID of the detector that specifies the GuardDuty service where you want to update a filter. To find the detectorId in the current Region, see the
    ///   - filterName: The name of the filter.
    ///   - findingCriteria: Represents the criteria to be used in the filter for querying findings.
    ///   - rank: Specifies the position of the filter in the list of current filters. Also specifies the order in which this filter is applied to the findings.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFilter(
        action: FilterAction? = nil,
        description: String? = nil,
        detectorId: String,
        filterName: String,
        findingCriteria: FindingCriteria? = nil,
        rank: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFilterResponse {
        let input = UpdateFilterRequest(
            action: action, 
            description: description, 
            detectorId: detectorId, 
            filterName: filterName, 
            findingCriteria: findingCriteria, 
            rank: rank
        )
        return try await self.updateFilter(input, logger: logger)
    }

    /// Marks the specified GuardDuty findings as useful or not useful.
    @Sendable
    @inlinable
    public func updateFindingsFeedback(_ input: UpdateFindingsFeedbackRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFindingsFeedbackResponse {
        try await self.client.execute(
            operation: "UpdateFindingsFeedback", 
            path: "/detector/{DetectorId}/findings/feedback", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Marks the specified GuardDuty findings as useful or not useful.
    ///
    /// Parameters:
    ///   - comments: Additional feedback about the GuardDuty findings.
    ///   - detectorId: The ID of the detector that is associated with the findings for which you want to update  the feedback. To find the detectorId in the current Region, see the
    ///   - feedback: The feedback for the finding.
    ///   - findingIds: The IDs of the findings that you want to mark as useful or not useful.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFindingsFeedback(
        comments: String? = nil,
        detectorId: String,
        feedback: Feedback? = nil,
        findingIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFindingsFeedbackResponse {
        let input = UpdateFindingsFeedbackRequest(
            comments: comments, 
            detectorId: detectorId, 
            feedback: feedback, 
            findingIds: findingIds
        )
        return try await self.updateFindingsFeedback(input, logger: logger)
    }

    /// Updates the IPSet specified by the IPSet ID.
    @Sendable
    @inlinable
    public func updateIPSet(_ input: UpdateIPSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateIPSetResponse {
        try await self.client.execute(
            operation: "UpdateIPSet", 
            path: "/detector/{DetectorId}/ipset/{IpSetId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the IPSet specified by the IPSet ID.
    ///
    /// Parameters:
    ///   - activate: The updated Boolean value that specifies whether the IPSet is active or not.
    ///   - detectorId: The detectorID that specifies the GuardDuty service whose IPSet you want to update. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - ipSetId: The unique ID that specifies the IPSet that you want to update.
    ///   - location: The updated URI of the file that contains the IPSet.
    ///   - name: The unique ID that specifies the IPSet that you want to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateIPSet(
        activate: Bool? = nil,
        detectorId: String,
        expectedBucketOwner: String? = nil,
        ipSetId: String,
        location: String? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateIPSetResponse {
        let input = UpdateIPSetRequest(
            activate: activate, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            ipSetId: ipSetId, 
            location: location, 
            name: name
        )
        return try await self.updateIPSet(input, logger: logger)
    }

    /// Updates an existing Malware Protection plan resource.
    @Sendable
    @inlinable
    public func updateMalwareProtectionPlan(_ input: UpdateMalwareProtectionPlanRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateMalwareProtectionPlan", 
            path: "/malware-protection-plan/{MalwareProtectionPlanId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Malware Protection plan resource.
    ///
    /// Parameters:
    ///   - actions: Information about whether the tags will be added to the S3 object after scanning.
    ///   - malwareProtectionPlanId: A unique identifier associated with the Malware Protection plan.
    ///   - protectedResource: Information about the protected resource that is associated  with the created Malware Protection plan. Presently, S3Bucket is the only supported protected resource.
    ///   - role: Amazon Resource Name (ARN) of the IAM role with permissions to scan and add tags to  the associated protected resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMalwareProtectionPlan(
        actions: MalwareProtectionPlanActions? = nil,
        malwareProtectionPlanId: String,
        protectedResource: UpdateProtectedResource? = nil,
        role: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateMalwareProtectionPlanRequest(
            actions: actions, 
            malwareProtectionPlanId: malwareProtectionPlanId, 
            protectedResource: protectedResource, 
            role: role
        )
        return try await self.updateMalwareProtectionPlan(input, logger: logger)
    }

    /// Updates the malware scan settings. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func updateMalwareScanSettings(_ input: UpdateMalwareScanSettingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateMalwareScanSettingsResponse {
        try await self.client.execute(
            operation: "UpdateMalwareScanSettings", 
            path: "/detector/{DetectorId}/malware-scan-settings", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the malware scan settings. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - detectorId: The unique ID of the detector that specifies the GuardDuty service where you want to update scan settings. To find the detectorId in the current Region, see the
    ///   - ebsSnapshotPreservation: An enum value representing possible snapshot preservation settings.
    ///   - scanResourceCriteria: Represents the criteria to be used in the filter for selecting resources to scan.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMalwareScanSettings(
        detectorId: String,
        ebsSnapshotPreservation: EbsSnapshotPreservation? = nil,
        scanResourceCriteria: ScanResourceCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateMalwareScanSettingsResponse {
        let input = UpdateMalwareScanSettingsRequest(
            detectorId: detectorId, 
            ebsSnapshotPreservation: ebsSnapshotPreservation, 
            scanResourceCriteria: scanResourceCriteria
        )
        return try await self.updateMalwareScanSettings(input, logger: logger)
    }

    /// Contains information on member accounts to be updated. Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func updateMemberDetectors(_ input: UpdateMemberDetectorsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateMemberDetectorsResponse {
        try await self.client.execute(
            operation: "UpdateMemberDetectors", 
            path: "/detector/{DetectorId}/member/detector/update", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Contains information on member accounts to be updated. Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - accountIds: A list of member account IDs to be updated.
    ///   - detectorId: The detector ID of the administrator account. To find the detectorId in the current Region, see the
    ///   - features: A list of features that will be updated for the specified member accounts.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMemberDetectors(
        accountIds: [String]? = nil,
        detectorId: String,
        features: [MemberFeaturesConfiguration]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateMemberDetectorsResponse {
        let input = UpdateMemberDetectorsRequest(
            accountIds: accountIds, 
            detectorId: detectorId, 
            features: features
        )
        return try await self.updateMemberDetectors(input, logger: logger)
    }

    /// Configures the delegated administrator account with the provided values. You must provide a value for either autoEnableOrganizationMembers or autoEnable, but not both.  Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    @Sendable
    @inlinable
    public func updateOrganizationConfiguration(_ input: UpdateOrganizationConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateOrganizationConfigurationResponse {
        try await self.client.execute(
            operation: "UpdateOrganizationConfiguration", 
            path: "/detector/{DetectorId}/admin", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Configures the delegated administrator account with the provided values. You must provide a value for either autoEnableOrganizationMembers or autoEnable, but not both.  Specifying both EKS Runtime Monitoring (EKS_RUNTIME_MONITORING) and Runtime Monitoring (RUNTIME_MONITORING) will cause an error.  You can add only one of these two features because Runtime Monitoring already includes the  threat detection for Amazon EKS resources. For more information, see Runtime Monitoring. There might be regional differences because some data sources might not be  available in all the Amazon Web Services Regions where GuardDuty is presently supported. For more  information, see Regions and endpoints.
    ///
    /// Parameters:
    ///   - autoEnableOrganizationMembers: Indicates the auto-enablement configuration of GuardDuty for the member accounts in the organization. You must provide a value for either autoEnableOrganizationMembers or autoEnable.  Use one of the  following configuration values for autoEnableOrganizationMembers:    NEW: Indicates that when a new account joins the organization, they will have GuardDuty enabled automatically.     ALL: Indicates that all accounts in the organization have GuardDuty enabled automatically. This includes NEW accounts that join the organization and accounts that may have been suspended or removed from the organization in GuardDuty. It may take up to 24 hours to update the configuration for all the member accounts.    NONE: Indicates that GuardDuty will not be automatically enabled for any account in the organization. The administrator must manage GuardDuty for each account in the organization individually. When you update the auto-enable setting from ALL or NEW to  NONE, this action doesn't disable the corresponding option for your existing accounts. This configuration will apply to the new accounts that join the organization. After you update the auto-enable settings, no new account will have the corresponding option as enabled.
    ///   - detectorId: The ID of the detector that configures the delegated administrator. To find the detectorId in the current Region, see the
    ///   - features: A list of features that will be configured for the organization.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateOrganizationConfiguration(
        autoEnableOrganizationMembers: AutoEnableMembers? = nil,
        detectorId: String,
        features: [OrganizationFeatureConfiguration]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateOrganizationConfigurationResponse {
        let input = UpdateOrganizationConfigurationRequest(
            autoEnableOrganizationMembers: autoEnableOrganizationMembers, 
            detectorId: detectorId, 
            features: features
        )
        return try await self.updateOrganizationConfiguration(input, logger: logger)
    }

    /// Updates information about the publishing destination specified by the destinationId.
    @Sendable
    @inlinable
    public func updatePublishingDestination(_ input: UpdatePublishingDestinationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePublishingDestinationResponse {
        try await self.client.execute(
            operation: "UpdatePublishingDestination", 
            path: "/detector/{DetectorId}/publishingDestination/{DestinationId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates information about the publishing destination specified by the destinationId.
    ///
    /// Parameters:
    ///   - destinationId: The ID of the publishing destination to update.
    ///   - destinationProperties: A DestinationProperties object that includes the DestinationArn and KmsKeyArn of the publishing destination.
    ///   - detectorId: The ID of the detector associated with the publishing destinations to update. To find the detectorId in the current Region, see the
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePublishingDestination(
        destinationId: String,
        destinationProperties: DestinationProperties? = nil,
        detectorId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePublishingDestinationResponse {
        let input = UpdatePublishingDestinationRequest(
            destinationId: destinationId, 
            destinationProperties: destinationProperties, 
            detectorId: detectorId
        )
        return try await self.updatePublishingDestination(input, logger: logger)
    }

    /// Updates the threat entity set associated with the specified threatEntitySetId.
    @Sendable
    @inlinable
    public func updateThreatEntitySet(_ input: UpdateThreatEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateThreatEntitySetResponse {
        try await self.client.execute(
            operation: "UpdateThreatEntitySet", 
            path: "/detector/{DetectorId}/threatentityset/{ThreatEntitySetId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the threat entity set associated with the specified threatEntitySetId.
    ///
    /// Parameters:
    ///   - activate: A boolean value that indicates whether GuardDuty is to start using this updated threat entity set. After you update an entity set, you will need to activate it again. It might take up to 15 minutes for the updated entity set to be effective.
    ///   - detectorId: The unique ID of the GuardDuty detector associated with the threat entity set that you want to update. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - location: The URI of the file that contains the trusted entity set.
    ///   - name: A user-friendly name to identify the trusted entity set. The name of your list can include  lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).
    ///   - threatEntitySetId: The ID returned by GuardDuty after updating the threat entity set resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateThreatEntitySet(
        activate: Bool? = nil,
        detectorId: String,
        expectedBucketOwner: String? = nil,
        location: String? = nil,
        name: String? = nil,
        threatEntitySetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateThreatEntitySetResponse {
        let input = UpdateThreatEntitySetRequest(
            activate: activate, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            location: location, 
            name: name, 
            threatEntitySetId: threatEntitySetId
        )
        return try await self.updateThreatEntitySet(input, logger: logger)
    }

    /// Updates the ThreatIntelSet specified by the ThreatIntelSet ID.
    @Sendable
    @inlinable
    public func updateThreatIntelSet(_ input: UpdateThreatIntelSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateThreatIntelSetResponse {
        try await self.client.execute(
            operation: "UpdateThreatIntelSet", 
            path: "/detector/{DetectorId}/threatintelset/{ThreatIntelSetId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the ThreatIntelSet specified by the ThreatIntelSet ID.
    ///
    /// Parameters:
    ///   - activate: The updated Boolean value that specifies whether the ThreateIntelSet is active or not.
    ///   - detectorId: The detectorID that specifies the GuardDuty service whose ThreatIntelSet you want to update. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - location: The updated URI of the file that contains the ThreateIntelSet.
    ///   - name: The unique ID that specifies the ThreatIntelSet that you want to update.
    ///   - threatIntelSetId: The unique ID that specifies the ThreatIntelSet that you want to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateThreatIntelSet(
        activate: Bool? = nil,
        detectorId: String,
        expectedBucketOwner: String? = nil,
        location: String? = nil,
        name: String? = nil,
        threatIntelSetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateThreatIntelSetResponse {
        let input = UpdateThreatIntelSetRequest(
            activate: activate, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            location: location, 
            name: name, 
            threatIntelSetId: threatIntelSetId
        )
        return try await self.updateThreatIntelSet(input, logger: logger)
    }

    /// Updates the trusted entity set associated with the specified trustedEntitySetId.
    @Sendable
    @inlinable
    public func updateTrustedEntitySet(_ input: UpdateTrustedEntitySetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateTrustedEntitySetResponse {
        try await self.client.execute(
            operation: "UpdateTrustedEntitySet", 
            path: "/detector/{DetectorId}/trustedentityset/{TrustedEntitySetId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the trusted entity set associated with the specified trustedEntitySetId.
    ///
    /// Parameters:
    ///   - activate: A boolean value that indicates whether GuardDuty is to start using this updated trusted entity set. After you update an entity set, you will need to activate it again. It might take up to 15 minutes for the updated entity set to be effective.
    ///   - detectorId: The unique ID of the GuardDuty detector associated with the threat entity set that you want to update. To find the detectorId in the current Region, see the
    ///   - expectedBucketOwner: The Amazon Web Services account ID that owns the Amazon S3 bucket specified in the location parameter.
    ///   - location: The URI of the file that contains the trusted entity set.
    ///   - name: A user-friendly name to identify the trusted entity set. The name of your list can include  lowercase letters, uppercase letters, numbers, dash (-), and underscore (_).
    ///   - trustedEntitySetId: The ID returned by GuardDuty after updating the trusted entity set resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateTrustedEntitySet(
        activate: Bool? = nil,
        detectorId: String,
        expectedBucketOwner: String? = nil,
        location: String? = nil,
        name: String? = nil,
        trustedEntitySetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateTrustedEntitySetResponse {
        let input = UpdateTrustedEntitySetRequest(
            activate: activate, 
            detectorId: detectorId, 
            expectedBucketOwner: expectedBucketOwner, 
            location: location, 
            name: name, 
            trustedEntitySetId: trustedEntitySetId
        )
        return try await self.updateTrustedEntitySet(input, logger: logger)
    }
}

extension GuardDuty {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: GuardDuty, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension GuardDuty {
    /// Return PaginatorSequence for operation ``describeMalwareScans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMalwareScansPaginator(
        _ input: DescribeMalwareScansRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMalwareScansRequest, DescribeMalwareScansResponse> {
        return .init(
            input: input,
            command: self.describeMalwareScans,
            inputKey: \DescribeMalwareScansRequest.nextToken,
            outputKey: \DescribeMalwareScansResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMalwareScans(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the detector that the request is associated with. To find the detectorId in the current Region, see the
    ///   - filterCriteria: Represents the criteria to be used in the filter for describing scan entries.
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - sortCriteria: Represents the criteria used for sorting scan entries. The  attributeName is required and it must be scanStartTime.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMalwareScansPaginator(
        detectorId: String,
        filterCriteria: FilterCriteria? = nil,
        maxResults: Int? = nil,
        sortCriteria: SortCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMalwareScansRequest, DescribeMalwareScansResponse> {
        let input = DescribeMalwareScansRequest(
            detectorId: detectorId, 
            filterCriteria: filterCriteria, 
            maxResults: maxResults, 
            sortCriteria: sortCriteria
        )
        return self.describeMalwareScansPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeOrganizationConfiguration(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOrganizationConfigurationPaginator(
        _ input: DescribeOrganizationConfigurationRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeOrganizationConfigurationRequest, DescribeOrganizationConfigurationResponse> {
        return .init(
            input: input,
            command: self.describeOrganizationConfiguration,
            inputKey: \DescribeOrganizationConfigurationRequest.nextToken,
            outputKey: \DescribeOrganizationConfigurationResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeOrganizationConfiguration(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The detector ID of the delegated administrator for which you need to retrieve the information. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOrganizationConfigurationPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeOrganizationConfigurationRequest, DescribeOrganizationConfigurationResponse> {
        let input = DescribeOrganizationConfigurationRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.describeOrganizationConfigurationPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getUsageStatistics(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsageStatisticsPaginator(
        _ input: GetUsageStatisticsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetUsageStatisticsRequest, GetUsageStatisticsResponse> {
        return .init(
            input: input,
            command: self.getUsageStatistics,
            inputKey: \GetUsageStatisticsRequest.nextToken,
            outputKey: \GetUsageStatisticsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getUsageStatistics(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The ID of the detector that specifies the GuardDuty service whose usage statistics you want to retrieve. To find the detectorId in the current Region, see the
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - unit: The currency unit you would like to view your usage statistics in. Current valid values are USD.
    ///   - usageCriteria: Represents the criteria used for querying usage.
    ///   - usageStatisticType: The type of usage statistics to retrieve.
    ///   - logger: Logger used for logging
    @inlinable
    public func getUsageStatisticsPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        unit: String? = nil,
        usageCriteria: UsageCriteria? = nil,
        usageStatisticType: UsageStatisticType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetUsageStatisticsRequest, GetUsageStatisticsResponse> {
        let input = GetUsageStatisticsRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            unit: unit, 
            usageCriteria: usageCriteria, 
            usageStatisticType: usageStatisticType
        )
        return self.getUsageStatisticsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCoverage(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCoveragePaginator(
        _ input: ListCoverageRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCoverageRequest, ListCoverageResponse> {
        return .init(
            input: input,
            command: self.listCoverage,
            inputKey: \ListCoverageRequest.nextToken,
            outputKey: \ListCoverageResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCoverage(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the detector whose coverage details you want to retrieve. To find the detectorId in the current Region, see the
    ///   - filterCriteria: Represents the criteria used to filter the coverage details.
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - sortCriteria: Represents the criteria used to sort the coverage details.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCoveragePaginator(
        detectorId: String,
        filterCriteria: CoverageFilterCriteria? = nil,
        maxResults: Int? = nil,
        sortCriteria: CoverageSortCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCoverageRequest, ListCoverageResponse> {
        let input = ListCoverageRequest(
            detectorId: detectorId, 
            filterCriteria: filterCriteria, 
            maxResults: maxResults, 
            sortCriteria: sortCriteria
        )
        return self.listCoveragePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDetectors(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDetectorsPaginator(
        _ input: ListDetectorsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDetectorsRequest, ListDetectorsResponse> {
        return .init(
            input: input,
            command: self.listDetectors,
            inputKey: \ListDetectorsRequest.nextToken,
            outputKey: \ListDetectorsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDetectors(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDetectorsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDetectorsRequest, ListDetectorsResponse> {
        let input = ListDetectorsRequest(
            maxResults: maxResults
        )
        return self.listDetectorsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFilters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFiltersPaginator(
        _ input: ListFiltersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFiltersRequest, ListFiltersResponse> {
        return .init(
            input: input,
            command: self.listFilters,
            inputKey: \ListFiltersRequest.nextToken,
            outputKey: \ListFiltersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFilters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the filter. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFiltersPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFiltersRequest, ListFiltersResponse> {
        let input = ListFiltersRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.listFiltersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFindings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFindingsPaginator(
        _ input: ListFindingsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFindingsRequest, ListFindingsResponse> {
        return .init(
            input: input,
            command: self.listFindings,
            inputKey: \ListFindingsRequest.nextToken,
            outputKey: \ListFindingsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFindings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The ID of the detector that specifies the GuardDuty service whose findings you want to list. To find the detectorId in the current Region, see the
    ///   - findingCriteria: Represents the criteria used for querying findings. Valid values include:   JSON field name   accountId   region   confidence   id   resource.accessKeyDetails.accessKeyId   resource.accessKeyDetails.principalId   resource.accessKeyDetails.userName   resource.accessKeyDetails.userType   resource.instanceDetails.iamInstanceProfile.id   resource.instanceDetails.imageId   resource.instanceDetails.instanceId   resource.instanceDetails.networkInterfaces.ipv6Addresses   resource.instanceDetails.networkInterfaces.privateIpAddresses.privateIpAddress   resource.instanceDetails.networkInterfaces.publicDnsName   resource.instanceDetails.networkInterfaces.publicIp   resource.instanceDetails.networkInterfaces.securityGroups.groupId   resource.instanceDetails.networkInterfaces.securityGroups.groupName   resource.instanceDetails.networkInterfaces.subnetId   resource.instanceDetails.networkInterfaces.vpcId   resource.instanceDetails.tags.key   resource.instanceDetails.tags.value   resource.resourceType   service.action.actionType   service.action.awsApiCallAction.api   service.action.awsApiCallAction.callerType   service.action.awsApiCallAction.remoteIpDetails.city.cityName   service.action.awsApiCallAction.remoteIpDetails.country.countryName   service.action.awsApiCallAction.remoteIpDetails.ipAddressV4   service.action.awsApiCallAction.remoteIpDetails.organization.asn   service.action.awsApiCallAction.remoteIpDetails.organization.asnOrg   service.action.awsApiCallAction.serviceName   service.action.dnsRequestAction.domain   service.action.dnsRequestAction.domainWithSuffix   service.action.networkConnectionAction.blocked   service.action.networkConnectionAction.connectionDirection   service.action.networkConnectionAction.localPortDetails.port   service.action.networkConnectionAction.protocol   service.action.networkConnectionAction.remoteIpDetails.country.countryName   service.action.networkConnectionAction.remoteIpDetails.ipAddressV4   service.action.networkConnectionAction.remoteIpDetails.organization.asn   service.action.networkConnectionAction.remoteIpDetails.organization.asnOrg   service.action.networkConnectionAction.remotePortDetails.port   service.additionalInfo.threatListName   service.archived When this attribute is set to 'true', only archived findings are listed. When it's set to 'false', only unarchived findings are listed. When this attribute is not set, all existing findings are listed.   service.ebsVolumeScanDetails.scanId   service.resourceRole   severity   type   updatedAt Type: Timestamp in Unix Epoch millisecond format: 1486685375000
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50.
    ///   - sortCriteria: Represents the criteria used for sorting findings.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFindingsPaginator(
        detectorId: String,
        findingCriteria: FindingCriteria? = nil,
        maxResults: Int? = nil,
        sortCriteria: SortCriteria? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFindingsRequest, ListFindingsResponse> {
        let input = ListFindingsRequest(
            detectorId: detectorId, 
            findingCriteria: findingCriteria, 
            maxResults: maxResults, 
            sortCriteria: sortCriteria
        )
        return self.listFindingsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listIPSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listIPSetsPaginator(
        _ input: ListIPSetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListIPSetsRequest, ListIPSetsResponse> {
        return .init(
            input: input,
            command: self.listIPSets,
            inputKey: \ListIPSetsRequest.nextToken,
            outputKey: \ListIPSetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listIPSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with IPSet. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listIPSetsPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListIPSetsRequest, ListIPSetsResponse> {
        let input = ListIPSetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.listIPSetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listInvitations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listInvitationsPaginator(
        _ input: ListInvitationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListInvitationsRequest, ListInvitationsResponse> {
        return .init(
            input: input,
            command: self.listInvitations,
            inputKey: \ListInvitationsRequest.nextToken,
            outputKey: \ListInvitationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listInvitations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listInvitationsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListInvitationsRequest, ListInvitationsResponse> {
        let input = ListInvitationsRequest(
            maxResults: maxResults
        )
        return self.listInvitationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listMembers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listMembersPaginator(
        _ input: ListMembersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListMembersRequest, ListMembersResponse> {
        return .init(
            input: input,
            command: self.listMembers,
            inputKey: \ListMembersRequest.nextToken,
            outputKey: \ListMembersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listMembers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the member. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items you want in the response. The default value is 50. The maximum value is 50.
    ///   - onlyAssociated: Specifies whether to only return associated members or to return all members (including members who haven't been invited yet or have been disassociated). Member accounts must have been previously associated with the GuardDuty administrator account using  Create Members .
    ///   - logger: Logger used for logging
    @inlinable
    public func listMembersPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        onlyAssociated: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListMembersRequest, ListMembersResponse> {
        let input = ListMembersRequest(
            detectorId: detectorId, 
            maxResults: maxResults, 
            onlyAssociated: onlyAssociated
        )
        return self.listMembersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOrganizationAdminAccounts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOrganizationAdminAccountsPaginator(
        _ input: ListOrganizationAdminAccountsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOrganizationAdminAccountsRequest, ListOrganizationAdminAccountsResponse> {
        return .init(
            input: input,
            command: self.listOrganizationAdminAccounts,
            inputKey: \ListOrganizationAdminAccountsRequest.nextToken,
            outputKey: \ListOrganizationAdminAccountsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOrganizationAdminAccounts(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func listOrganizationAdminAccountsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOrganizationAdminAccountsRequest, ListOrganizationAdminAccountsResponse> {
        let input = ListOrganizationAdminAccountsRequest(
            maxResults: maxResults
        )
        return self.listOrganizationAdminAccountsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPublishingDestinations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPublishingDestinationsPaginator(
        _ input: ListPublishingDestinationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPublishingDestinationsRequest, ListPublishingDestinationsResponse> {
        return .init(
            input: input,
            command: self.listPublishingDestinations,
            inputKey: \ListPublishingDestinationsRequest.nextToken,
            outputKey: \ListPublishingDestinationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPublishingDestinations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The detector ID for which you want to retrieve the publishing destination. To find the detectorId in the current Region, see the
    ///   - maxResults: The maximum number of results to return in the response.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPublishingDestinationsPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPublishingDestinationsRequest, ListPublishingDestinationsResponse> {
        let input = ListPublishingDestinationsRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.listPublishingDestinationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listThreatEntitySets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listThreatEntitySetsPaginator(
        _ input: ListThreatEntitySetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListThreatEntitySetsRequest, ListThreatEntitySetsResponse> {
        return .init(
            input: input,
            command: self.listThreatEntitySets,
            inputKey: \ListThreatEntitySetsRequest.nextToken,
            outputKey: \ListThreatEntitySetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listThreatEntitySets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the GuardDuty detector that is associated with this threat entity set. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of  items you want in the response. The default value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listThreatEntitySetsPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListThreatEntitySetsRequest, ListThreatEntitySetsResponse> {
        let input = ListThreatEntitySetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.listThreatEntitySetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listThreatIntelSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listThreatIntelSetsPaginator(
        _ input: ListThreatIntelSetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListThreatIntelSetsRequest, ListThreatIntelSetsResponse> {
        return .init(
            input: input,
            command: self.listThreatIntelSets,
            inputKey: \ListThreatIntelSetsRequest.nextToken,
            outputKey: \ListThreatIntelSetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listThreatIntelSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the detector that is associated with the threatIntelSet. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of items that you want in the response. The default value is 50. The maximum value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listThreatIntelSetsPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListThreatIntelSetsRequest, ListThreatIntelSetsResponse> {
        let input = ListThreatIntelSetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.listThreatIntelSetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTrustedEntitySets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTrustedEntitySetsPaginator(
        _ input: ListTrustedEntitySetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTrustedEntitySetsRequest, ListTrustedEntitySetsResponse> {
        return .init(
            input: input,
            command: self.listTrustedEntitySets,
            inputKey: \ListTrustedEntitySetsRequest.nextToken,
            outputKey: \ListTrustedEntitySetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTrustedEntitySets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - detectorId: The unique ID of the GuardDuty detector that is associated with this threat entity set. To find the detectorId in the current Region, see the
    ///   - maxResults: You can use this parameter to indicate the maximum number of  items you want in the response. The default value is 50.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTrustedEntitySetsPaginator(
        detectorId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTrustedEntitySetsRequest, ListTrustedEntitySetsResponse> {
        let input = ListTrustedEntitySetsRequest(
            detectorId: detectorId, 
            maxResults: maxResults
        )
        return self.listTrustedEntitySetsPaginator(input, logger: logger)
    }
}

extension GuardDuty.DescribeMalwareScansRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.DescribeMalwareScansRequest {
        return .init(
            detectorId: self.detectorId,
            filterCriteria: self.filterCriteria,
            maxResults: self.maxResults,
            nextToken: token,
            sortCriteria: self.sortCriteria
        )
    }
}

extension GuardDuty.DescribeOrganizationConfigurationRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.DescribeOrganizationConfigurationRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.GetUsageStatisticsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.GetUsageStatisticsRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token,
            unit: self.unit,
            usageCriteria: self.usageCriteria,
            usageStatisticType: self.usageStatisticType
        )
    }
}

extension GuardDuty.ListCoverageRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListCoverageRequest {
        return .init(
            detectorId: self.detectorId,
            filterCriteria: self.filterCriteria,
            maxResults: self.maxResults,
            nextToken: token,
            sortCriteria: self.sortCriteria
        )
    }
}

extension GuardDuty.ListDetectorsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListDetectorsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListFiltersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListFiltersRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListFindingsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListFindingsRequest {
        return .init(
            detectorId: self.detectorId,
            findingCriteria: self.findingCriteria,
            maxResults: self.maxResults,
            nextToken: token,
            sortCriteria: self.sortCriteria
        )
    }
}

extension GuardDuty.ListIPSetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListIPSetsRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListInvitationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListInvitationsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListMembersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListMembersRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token,
            onlyAssociated: self.onlyAssociated
        )
    }
}

extension GuardDuty.ListOrganizationAdminAccountsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListOrganizationAdminAccountsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListPublishingDestinationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListPublishingDestinationsRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListThreatEntitySetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListThreatEntitySetsRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListThreatIntelSetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListThreatIntelSetsRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension GuardDuty.ListTrustedEntitySetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> GuardDuty.ListTrustedEntitySetsRequest {
        return .init(
            detectorId: self.detectorId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
